限制C#中的泛型类型

roh*_*t89 9 c# generics types

我有一个泛型类MyClass<T>,其中T应该是那些可以比较的类型.

这将仅表示已定义关系运算符的方法的数字类型和类.我该怎么做呢 ?

Ant*_*ram 11

您不能限制运算符,但可以约束接口.因此,打算使用>=, <=, ==,但你可以使用CompareTo, Equals.

where T : IComparable<T>
Run Code Online (Sandbox Code Playgroud)

界面文档

此接口为您提供了CompareTo对关系排序(大于,小于等)有用的方法.基元和字符串已实现此功能,但您需要为自己的自定义类型实现此功能.你会像这样使用它

void SomeMethod<T>(T alpha, T beta) where T : IComparable<T>
{
    if (alpha.CompareTo(beta) > 0) 
    {
        // alpha is greater than beta, replaces alpha > beta
    }
    else if (alpha.CompareTo(beta) < 0)
    {
        // alpha is less than beta, replaces alpha < beta
    }
    else 
    {
        // CompareTo returns 0, alpha equals beta
    }
}
Run Code Online (Sandbox Code Playgroud)

Equals默认情况下,您将获得虚拟方法object.如果要使用除引用相等之外的其他内容,则希望在自己的自定义类型上覆盖此方法.(强烈建议同时覆盖GetHashCode.)