我想写一个泛型方法:
void Foo<T>(IList<T> list)
在该方法中,我想通过使用运算符
这可能吗?如果不是,这意味着我认为 C# 泛型的使用非常有限。
这可能吗?如果不是,这意味着我认为 C# 泛型的使用非常有限。
即使不可能,泛型也可以在许多情况下使用。
但是,鉴于所有基元类型都实现了IComparable<T>
,这真的很简单;
void Foo<T>(IList<T> list) where T : IComparable<T>
{
T x = ...;
T y = ...;
if (x.CompareTo(y) < 0)
{
...
}
}
请注意,这不会引入装箱操作。我希望基元类型的 JITted 代码最终具有与硬编码以使用 <
或 >
非常相似的性能。
现在这是一个稍微特殊的情况,因为有一个接口大致相当于那些运算符。使用算术运算符(+
、-
等)并不容易。请参阅我网站上的文章,了解一些方法。