gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:16:50 25 4
gpt4 key购买 nike

我想写一个泛型方法:

void Foo<T>(IList<T> list)

在该方法中,如果 T 是基本类型,我想通过使用运算符 < 或如果 T 实现了 IComparable,则使用 Compare() 来比较列表的元素。

这可能吗?如果不是,我认为这意味着 C# 泛型的使用非常有限。

最佳答案

Is this possible? If not, it means C# generics is very limited in use I think.

即使不可能,泛型也可以在许多许多情况下使用。

然而,考虑到所有原始类型都实现了 IComparable<T>,这真的很简单;

void Foo<T>(IList<T> list) where T : IComparable<T>
{
T x = ...;
T y = ...;
if (x.CompareTo(y) < 0)
{
...
}
}

请注意,这不会引入装箱操作。我希望原始类型的 JITted 代码最终具有非常与硬编码以使用 < 相似的性能。或 > .

现在这是一个稍微特殊的情况,因为有一个接口(interface)大致等同于那些运算符。 不是那么简单的是使用算术运算符(+- 等)。查看article on my web site了解一些解决方法。

关于c# - 如何在具有多个约束的 C# 中实现泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21139324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com