gpt4 book ai didi

c# - 类约束

转载 作者:行者123 更新时间:2023-11-30 13:29:53 25 4
gpt4 key购买 nike

尝试在类上定义约束,但出现错误:

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'

error

虽然对函数的约束工作正常:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com