泛型类型已包含定义
c#
如果我尝试Pair<A, B>在 C# 中定义以下类,则会出现编译器错误。
public class Pair<A, B>
{
public Pair(A a, B b)
{
this.A = a;
this.B = b;
}
public A A { get; }
public B B { get; }
}
编译器错误是:
error CS0102: The type 'Pair<A, B>' already contains a definition for 'A' error CS0102: The type 'Pair<A, B>' already contains a definition for 'B'
相互矛盾的定义在哪里?
通常,可以定义一个与其类型同名的属性,例如:
public Guid Guid { get; }
public Uri Uri { get; }
为什么编译器会抱怨名称A和B?
回答
它在 C# 标准的“类成员”部分中指定。在当前的Draft-v6 分支中:
类声明的type_parameter_list中的类型参数的名称应与同一type_parameter_list中所有其他类型参数的名称不同,并且应与类名称和类所有成员的名称不同。
换句话说,您无法获得与另一个类型参数或类成员同名的类型参数。在这里,您有一个名为 的类型参数A和一个名为 的属性A。
财产的类型也A无关紧要;此代码给出了相同的错误:
class Broken<T>
{
public string T { get; set; }
}