我有一个通用类 MyClass<T>
其中 T
应该仅是那些可以比较的类型。
这意味着只有数字类型和类已经定义了关系运算符的方法。我该怎么做?
最佳答案
您不能约束到运算符,但可以约束到接口(interface)。因此,打算使用 >=, <=, ==
已经出来了,但你可以使用 CompareTo, Equals
.
where T : IComparable<T>
此界面为您带来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
}
}
Equals
默认情况下,您会在 object
上获得虚拟方法.如果您想要使用引用相等以外的东西,您需要在您自己的自定义类型上重写此方法。 (也强烈建议同时覆盖GetHashCode
。)
关于c# - 限制 C# 中的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890097/