更新:2007 年 11 月
错误消息
“name”在“attribute1”和“attribute2”之间不明确。请使用“@attribute”或“attributeAttribute”编译器遇到了意义不明确的属性指定。
为简便起见,C# 编译器允许将 ExampleAttribute 指定为 [Example]。不过,如果名为 Example 的属性类与 ExampleAttribute 同时存在,则会引起多义性,因为编译器无法判断 [Example] 是指 Example 属性还是指 ExampleAttribute 属性。要解决此问题,请对 Example 属性使用 [@Example],而对 ExampleAttribute 使用 [ExampleAttribute]。
下面的示例生成 CS1614:
复制代码 | |
---|---|
// CS1614.cs using System; // Both of the following classes are valid attributes with valid // names (MySpecial and MySpecialAttribute). However, because the lookup // rules for attributes involves auto-appending the 'Attribute' suffix // to the identifier, these two attributes become ambiguous; that is, // if you specify MySpecial, the compiler can't tell if you want // MySpecial or MySpecialAttribute. public class MySpecial : Attribute { public MySpecial() {} } public class MySpecialAttribute : Attribute { public MySpecialAttribute() {} } class MakeAWarning { [MySpecial()] // CS1614 // Ambiguous: MySpecial or MySpecialAttribute? public static void Main() { } [@MySpecial()] // This isn't ambiguous, it binds to the first attribute above. public static void NoWarning() { } [MySpecialAttribute()] // This isn't ambiguous, it binds to the second attribute above. public static void NoWarning2() { } [@MySpecialAttribute()] // This is also legal. public static void NoWarning3() { } } |