尝试在类上定义约束,但出现错误:
public class Utilities3<T> where T : IComparable
{
public T Max<T>(T a, T b)
{
return a.CompareTo(b) > 0 ? a : b;
}
}
'T' does not contain a definition for 'CompareTo' and no extension method 'CompareTo' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?)
Cannot resolve symbol 'CompareTo'
虽然对函数的约束工作正常:
public class Utilities2<T>
{
public T Max<T>(T a, T b) where T : IComparable
{
return a.CompareTo(b) > 0 ? a : b;
}
}
为什么对类的约束不起作用?
最佳答案
问题是您在方法上重新定义了 T
,这隐藏了在类上定义的 T
。因此,您要么需要对方法进行约束,要么更可能不应该重新定义泛型类型。
public class Utilities3<T> where T : IComparable
{
public T Max(T a, T b)
{
return a.CompareTo(b) > 0 ? a : b;
}
}
您通常只在类或其方法上定义泛型类型。如果出于某种原因您确实需要在两个地方都定义它们,那么最好为它们指定唯一的名称,除非您特别想要隐藏行为,但这种可能性很小。
关于c# - 类约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46321362/