gpt4 book ai didi

c# - 使用泛型在 C# 中获取数组元素的总和

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

我想编写一个方法,该方法可以采用任意数字类型的数组并返回 startIndex 和 endIndex 之间所有元素的总和。这是我的:

private static T SumArrayRange<T>(T[] scores, int startIndex, int endIndex)
{
T score = 0;
for (int i = startIndex; i <= endIndex; i++)
{
score += scores[i];
}
return score;
}

但是编译失败并出现这两个错误。

  • 无法隐式转换类型“int”到'T'。
  • 运算符 '+=' 不能应用于“T”类型的操作数和'T'

有什么方法可以强制 T 只是其中一种数字类型(long、double 等)?或者他们是解决这个问题的更优雅的方法?

最佳答案

不,没有办法限制泛型类型参数使用运算符,而且也没有好的解决方法。一个合适的接口(interface)应该是一个接口(interface),例如 INumericIArithmetic 以及诸如 AddSubtract 等方法,已实现通过所有基本类型,例如 intlong。有一个 5-year old feature request for that在 MS Connect 中,它仍然处于事件状态。最新的说法是:

Unfortunately, we've had to cut our plans to solve this problem in the .NET Framework 4.0.

在那之前,您将被降级为:

  • 自己使用 Reflection - 杂乱且非常缓慢
  • 使用任何将为您使用反射的现有包装器(例如 Microsoft.VisualBasic.CompilerServices.Operators 类,使用 AddObjectSubtractObject 等方法,它们使用反射并实现 VB相应运算符的语义)- 易于使用,但仍然很慢
  • 您要处理的硬编码类型(即不支持用户定义类型上的重载算术运算符),并使用巨大的 if (x is int) ... else if (x is double) ... 语句。

关于c# - 使用泛型在 C# 中获取数组元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1146208/

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