9
A
回答
10
您不能限制为运算符,但可以限制为接口。因此,打算使用>=, <=, ==
已不在,但您可以使用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
)
3
您可以将泛型类型限制为仅使用where修饰符实现IComparable接口的类。
public class MyClass<K> where K : IComparable
{
....
}
3
如果要限制它的东西,能比的,你可以做这样的事情:
public class MyClass<T> where T:IComparable
-1
如果速度是相关的使用建议的方法会给你带来巨大的性能损失。如果没有,所有建议的事情都可以正常工作。
这是一个我经常遇到的问题,因为C#中的原始数据类型没有像其他人经常暗示和要求的“数字”数据类型。
也许C#的下一个版本将拥有它,但我怀疑...
相关问题
- 1. 限制类型参数在C#泛型
- 2. C#泛型有限的返回类型
- 3. C++限制泛型中的类型(和指针问题)
- 4. C中的泛型类型#
- 5. 限制泛型类型参数System.Enum
- 6. 无法限制泛型类型
- 7. 泛型类型限制在Visual Basic
- 8. 如何限制泛型类型参数只接受C#中的空值类型?
- 9. Scala类型:如何限制子类的泛型类型?
- 10. Java:在子类型中指定泛型类型限制
- 11. C#泛型类型
- 12. LAMBDA泛型类型界限
- 13. 如何定义基本类型的泛型类型限制?
- 14. 定义对可空基本类型的泛型类型限制
- 15. 如何限制在泛型类中允许为“T”的类型?
- 16. C#类型到泛型类
- 17. Dart:扩展带限制的泛型类
- 18. 泛型方法有限制类型参数和类型擦除
- 19. 限制泛型类型为几种类型
- 20. 的Java泛型类型泛型类型
- 21. 泛型类型的泛型?
- 22. 如何解决C#中泛型类型约束的局限性?
- 23. C#泛型类型解决
- 24. 空泛型类型C#
- 25. C#cast泛型类型
- 26. C#泛型类型继承
- 27. 如何泛型类型强制转换成非泛型类型
- 28. C#将泛型类型作为泛型类型参数传递?
- 29. 类型转换泛型类型C++
- 30. C#泛型类与泛型方法
了IComparable没有Equals方法,那IEquatable –
@nathan,你是正确的,但'Equals'是一个虚拟的方法对象默认情况下,所以我没有在答案中提到接口。为了清晰起见,将进行更 –
我这样做了,但现在我得到错误'运营商<不能不适用于T和T'。我必须实现CompareTo()吗?我在想,编译器会根据类型来弄清楚这是如何完成的。 – rohit89