gpt4 book ai didi

c# - 如何使用泛型类型简化此代码?

转载 作者:行者123 更新时间:2023-12-02 14:34:07 25 4
gpt4 key购买 nike

private delegate T MyFunc<T>(int i);

private static double SumNumber(int i, int n, MyFunc<double> func)
{
double sum = 0.0;
for (int j = i; i <= n; j++)
{
sum += func(j);
}
return sum;
}

private static Vector SumVector(int i, int n, MyFunc<Vector> func)
{
Vector sum = new Vector(0.0, 0.0);
for (int j = i; i <= n; j++)
{
sum += func(j);
}
return sum;
}

这是一个计算 MyFunc(j) 之和的程序,其中 j 是 i 到 n。

我尝试使用如下界面:

interface IAddable<T>
{
static T operator +(T x, T y);
}

但是没有成功。

那我该怎么办?

最佳答案

首先,请注意,在许多方面,非泛型重载版本更简单。泛型不支持运算符,接口(interface)也不支持。

确实,如果有 Sum适用于您的类型的方法(可能通过 IEnumerable<T> 上的扩展方法)调用者可以简单地使用:

var data = sourceData.Select(projection).Sum();

哪里projection道德上相当于 func .

要按照您的方式进行操作,您可以首先尝试的是 dynamic :

private static T Sum<T>(int i, int n, Func<int,T> func)
{
if(i >= n) throw new ArgumentOutOfRangeException();
T sum = func(i);
for (int j = i + 1; i <= n; j++)
{
sum = (dynamic)sum + (dynamic)func(j);
}
return sum;
}

否则,您可以使用一些技巧来伪造通用运算符(请参阅 MiscUtil ),或者您可以传入累加器方法(即 Func<T,T,T> add )作为参数。 p>

关于c# - 如何使用泛型类型简化此代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7721867/

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