Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在泛型类的方法中比较T的两个变量<;T、 U>;(从C+;+;到C的代码端口)_C#_Generics - Fatal编程技术网

C# 在泛型类的方法中比较T的两个变量<;T、 U>;(从C+;+;到C的代码端口)

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是否有默认

如何在泛型类的方法中比较T类型的两个变量? 以下是引发以下编译器错误的示例代码:

错误CS0019运算符“>=”不能应用于“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#中没有办法说“require
T
要有一个>=操作符”。现在我已经为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) {
        }
    }
}