c# - 类约束

标签 c# constraints

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

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/

相关文章:

c# - 从平面 XML 反序列化的嵌套类

c# - ASPNET 核心 : Wrong Value for ContentRootPath

java - SQL 删除级联帮助(特定问题)

sql - 唯一约束的可用性

java - 为什么 bean 验证 Min/Max 约束不支持 double 类型?

c# - 获取 Blob 容器中特定前缀内所有 Uri 的名称

c# - 在 .NET 中向 Dictionary<> 对象添加项目时如何避免双重检查锁定?

javascript - 如何在打字时设置文本框格式?

mysql - 设置我的画廊表格

swift - UITableViewCell 内 UIImageView 的动态大小