コンパイラ エラー CS1614
'name' は 'name' と 'nameAttribute' のどちらを表しているのかあいまいです。'@name' または 'nameAttribute' のいずれかを使用します。
コンパイラで、あいまいな属性の指定が検出されました。
便宜上、C# コンパイラでは、単なる [Example]
として ExampleAttribute を指定することが許可されています。 ただし、Example
という名前の属性クラスが ExampleAttribute と共に存在する場合は、[Example]
が Example
属性と ExampleAttribute 属性のどちらを表しているかをコンパイラが判別できないため、あいまいさが発生します。 明確にするために、Example
e 属性には [@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() {
}
}
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET