如何在具有多个约束的 C# 中实现泛型方法



我想写一个泛型方法:

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 代码最终具有硬编码以使用 <> 非常相似的性能。

现在这是一个稍微特殊的情况,因为有一个接口大致相当于那些运算符。使用算术运算符(+-等)并不容易。请参阅我网站上的文章,了解一些方法。

最新更新