2013-04-24 32 views
4

假设我有一个最小的C#类,如下所示:应用一个C#属性到很多领域

class Thing 
{ 
    private float a, b, c, d; 
    (...) 
} 

有没有办法,我可以申请的属性,而无需编写所有四个领域的一种方式它四次?如果我将[SomeAttribute]放在private的前面,它似乎只适用于a

+4

可能的重复问题:http://stackoverflow.com/questions/10725998/can-you-apply-a-attribute-to-multiple -fields-in-c – Javiere 2013-04-24 10:21:20

+0

为什么不直接声明每个变量? – havardhu 2013-04-24 10:21:49

+1

如果您最终完全写出来,请先使用Alt + Shift + Down 4次。它会选择4行并克隆你输入的内容,实际上可以省掉4次。 – James 2013-04-24 10:23:22

回答

3

是的,这是可能的:

[SomeAttribute] 
public int m_nVar1, m_nVar2; 

(但显然只有在类型相同)

REFERENCE

例子:

[ContextStatic] 
private float a, b, c, d; 
+0

当然,你可以包括你从[romkyn的回答](http://stackoverflow.com/a/10726024/146622)复制这个逐字。 – Virtlink 2013-04-24 10:33:25

+0

最好是发布链接而不是复制整个答案。看到这个讨论http://meta.stackexchange.com/questions/78658/is-it-okay-to-copy-paste-answers-from-other-questions – 2013-04-24 10:34:44

+0

你是对的,当然。我认为它只适用于第一个,但我误解了编译器的错误信息。谢谢。 – peterpi 2013-04-24 10:35:24

0

我不认为你可以以任何方式使用visual studio获得成就。

我能想到的最不讨厌的方式是使用MultiEdit,您可以在其中放置多个游标,并且只写入一次属性。

4
class Thing 
{ 
    [SomeAttribute] 
    public float a, b, c, d; 
} 

您提出的上述内容可以帮助您如何工作。您可以测试此:

[AttributeUsage(AttributeTargets.Field)] 
sealed class SomeAttribute: Attribute 
{ 
    public SomeAttribute() 
    { 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var t = typeof(Thing); 
     var attrs = from f in t.GetFields() 
        from a in f.GetCustomAttributes() 
        select new { Name = f.Name, Attribute = a.GetType() }; 

     foreach (var a in attrs) 
      Console.WriteLine(a.Name + ": " + a.Attribute); 

     Console.ReadLine(); 
    } 
} 

它打印:

 
a: SomeAttribute 
b: SomeAttribute 
c: SomeAttribute 
d: SomeAttribute 
+0

你是对的,谢谢。我误解了我的项目中其他地方的错误消息:( – peterpi 2013-04-24 10:37:09