相关疑难解决方法(0)

如何比较泛型类型的值?

如何比较泛型类型的值?

我把它减少到最小的样本:

public class Foo<T> where T : IComparable
{
    private T _minimumValue = default(T);

    public bool IsInRange(T value) 
    {
        return (value >= _minimumValue); // <-- Error here
    }
}
Run Code Online (Sandbox Code Playgroud)

错误是:

运算符'> ='不能应用于'T'和'T'类型的操作数.

到底怎么回事!?T已被约束到IComparable,甚至它限制值类型(的时候where T: struct),我们仍然不能将任何运营商<,>,<=,>=,==!=.(我知道,涉及到解决方法Equals()的存在==!=,但它并不能帮助对于关系运算符).

那么,有两个问题:

  1. 为什么我们观察到这种奇怪的行为?是什么让我们从比较这是泛型类型的值称为IComparable?它不是以某种方式打败了通用约束的整个目的吗?
  2. 我该如何解决这个问题,或至少解决这个问题?

(我意识到已经有一些问题与这个看似简单的问题有关 - 但没有一个线程能给出详尽或可行的答案,所以在这里.)

.net c# generics icomparable

70
推荐指数
4
解决办法
6万
查看次数

必须实现一个小于和大于一般的操作

我绝对不能硬编码数据类型.我需要严格的数据输入.我必须使用TValue a <= TValue b.再一次,绝对没有办法去做(双)a.这是基本库实现的一部分.关于泛型值的唯一具体事情是它们是静态类型.IComparable和其他接口似乎不起作用.

c# generics

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×2

generics ×2

.net ×1

icomparable ×1