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

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

为什么IComparable不能为您服务?

您可能无法获得使用“<”和“>”符号的语法糖,但您可以检查CompareTo的结果是否小于或大于0,这将为您提供相同的信息。

您甚至可以编写一个很好的扩展方法,以便更容易使用。

static void Main(string[] args) { Console.WriteLine(1.IsGreaterThan(2)); Console.WriteLine(1.IsLessThan(2)); } public static bool IsGreaterThan(this T value, T other) where T : IComparable { return value.CompareTo(other) > 0; } public static bool IsLessThan(this T value, T other) where T : IComparable { return value.CompareTo(other) < 0; } 

只需使用System.Collections.Generic.Comparer.Default.Compare(x,y) – 并查找负,正和0返回值。

它支持IComparableIComparable ,适用于类,结构和Nullable -of-structs。

您可以更精确地使用您的数据类型和用例吗?

毕竟,要实现比较操作,您需要有关该类的某些信息; 一个完全通用的实现通常不具备比较两个对象所需的信息 – 除非你想在GetHashCode()或ToString()上对它们进行排序,这是一件很奇怪的事情。

有各种用于类型安全比较的通用接口:

  • 对象本身的IComparable
  • IComparer作为外部比较实现。

如果您在类型上实现了IComparableIComparable ,那么您可以使用Comparer.Default自动获取后一种变体 – 这使得比较消费者的写入时间更短,并且是通用约束的替代方案要求类型为IComparable