gpt4 book ai didi

c# - 重构仅由一个函数调用不同的代码块

转载 作者:行者123 更新时间:2023-12-02 15:55:26 24 4
gpt4 key购买 nike

我有类似的计算哈特利变换的公式。唯一的区别是以下代码行中的输入函数 - sin、cos、exp:

Math.Exp((double)tau)
Math.Sin((double)tau)
Math.Cos((double)tau)

如何转义几乎相同的代码片段并缩短以下片段中的代码?

 private void CountHartley(ref double [] arr, string function)
{
int N = arr.Length;
if (function == "exp")
{
for (int nu = 0, tau = 0; ((nu < N) && (tau < N)); nu++, tau++)
{
arr[nu] = 1 / (double)N *
Math.Exp((double)tau) *
(Math.Sin(2 * Math.PI * nu * tau / (double) N) +
Math.Cos(2 * Math.PI * nu * tau / (double) N));
}
}
else if (function == "sin")
{
for (int nu = 0, tau = 0; ((nu < N) && (tau < N)); nu++, tau++)
{
arr[nu] = 1 / (double)N *
Math.Sin((double)tau) *
(Math.Sin(2 * Math.PI * nu * tau / (double)N) +
Math.Cos(2 * Math.PI * nu * tau / (double)N));
}
}
else
{
for (int nu = 0, tau = 0; ((nu < N) && (tau < N)); nu++, tau++)
{
arr[nu] = 1 / (double)N *
Math.Cos((double)tau) *
(Math.Sin(2 * Math.PI * nu * tau / (double)N) +
Math.Cos(2 * Math.PI * nu * tau / (double)N));
}
}
}

最佳答案

您可以直接传入函数,而不是传入要使用的函数的字符串

您可以使用Func<T, TResult> Delegate为此,如下:

private void CountHartley(ref double [] arr, Func<double, double> function)
{
int N = arr.Length;
for (int nu = 0, tau = 0; ((nu < N) && (tau < N)); nu++, tau++)
{
arr[nu] = 1 / (double)N *
function((double)tau) *
(Math.Sin(2 * Math.PI * nu * tau / (double) N) +
Math.Cos(2 * Math.PI * nu * tau / (double) N));
}
}

用法:

var result = CountHartley(arr, Math.Cos);

关于c# - 重构仅由一个函数调用不同的代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10364576/

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