C# 在泛型类的方法中比较T的两个变量<;T、 U>;(从C+;+;到C的代码端口)
如何在泛型类的方法中比较T类型的两个变量C# 在泛型类的方法中比较T的两个变量<;T、 U>;(从C+;+;到C的代码端口),c#,generics,C#,Generics,如何在泛型类的方法中比较T类型的两个变量? 以下是引发以下编译器错误的示例代码: 错误CS0019运算符“>=”不能应用于“T”类型的操作数 而不是 class IntervalSet { 公共无效添加(T开始、T结束、参考值) { //新间隔为空? 如果(开始>=结束)//错误 返回; } } 我尝试将源从C++移植到C语言,C语言是我的新事物。谢谢你的帮助。你必须告诉C#T是可比的,否则你只能用T做System.Object事情(这并不多),不包括创建新实例,因为C#甚至不知道T是否有默认
class IntervalSet
{
公共无效添加(T开始、T结束、参考值)
{
//新间隔为空?
如果(开始>=结束)//错误
返回;
}
}
<>我尝试将源从C++移植到C语言,C语言是我的新事物。谢谢你的帮助。你必须告诉C#T
是可比的,否则你只能用T
做System.Object
事情(这并不多),不包括创建新实例,因为C#甚至不知道T
是否有默认构造函数:
class IntervalSet< T, U >
where T : IComparable<T>
{
public void Add ( T start, T end, ref U val )
{
if (start.CompareTo(end) >= 0) {
}
}
}
class IntervalSet
其中T:i可比较
{
公共无效添加(T开始、T结束、参考值)
{
如果(开始比较到(结束)>=0){
}
}
}
请注意,int
、string
、DateTime
等标准类型都实现了此接口
请参阅:,泛型不是模板。不幸的是,使用泛型并没有简单的方法可以做到这一点——您最好使用
IComparable
。那么您希望如何比较它们呢?如果T
是一个流
,您想做什么?您可以约束T
以实现IComparable
,也可以传入一个icomparaler
。这是为了通过IComparable
接口支持CompareTo
。不幸的是,在C#中没有办法说“requireT
要有一个>=操作符”。现在我已经为T定义了一个接口基类,在这里我定义了所有需要的方法。然后我像这样编写泛型:类CIntervalSet,其中T:TBase
class IntervalSet< T, U >
where T : IComparable<T>
{
public void Add ( T start, T end, ref U val )
{
if (start.CompareTo(end) >= 0) {
}
}
}