C# 用C同时重写类的多个函数#

C# 用C同时重写类的多个函数#,c#,C#,也许这里的覆盖不是正确的术语。 我想扩展一些System.Math类函数来处理双数组 我目前正在做的是: public double[] Sin(double[] d) { double[] result = new double[d.Length]; for(int i=0;i<result.Length;i++) result[i] = Math.Sin(d[i]); } public double[]Sin(double[]d) { 双精度[]结果=新的双精度[d.长度]

也许这里的覆盖不是正确的术语。 我想扩展一些System.Math类函数来处理双数组

我目前正在做的是:

public double[] Sin(double[] d)
{
double[] result = new double[d.Length];
for(int i=0;i<result.Length;i++)
     result[i] = Math.Sin(d[i]);
}
public double[]Sin(double[]d)
{
双精度[]结果=新的双精度[d.长度];

对于(int i=0;i不太可能,但您可以使用以下方法缩短它:

如果函数名位于字符串中,则可以使用字典:

var dict = new Dictionary<string, Func<double[], double[]>> {
    { "Sin", a => Array.ConvertAll(a, Math.Sin) },
    { "Cos", a => Array.ConvertAll(a, Math.Cos) }
};

double[] d = { 1, 2 };
double[] result = dict["Sin"](d);         // { 0.8414709848078965, 0.90929742682568171 }
var dict=新字典{
{“Sin”,a=>Array.ConvertAll(a,Math.Sin)},
{“Cos”,a=>Array.ConvertAll(a,Math.Cos)}
};
双[]d={1,2};
双[]结果=dict[“Sin”](d);/{0.8414709848078965,0.90929742682568171}

您可以创建更通用的方法来处理数组

internal static void Transform(double[] values, Func<double, double> transformation)
{
    for(int i = 0; i < values.Length; i++)
        values[i] = transformation[values[i]];
}
var result = Sin(values)

用法如下

internal static void Transform(double[] values, Func<double, double> transformation)
{
    for(int i = 0; i < values.Length; i++)
        values[i] = transformation[values[i]];
}
var result = Sin(values)

您可以使用扩展方法:

public static class MathExtensions
{
    public static double[] Sin(this double[] input)
    {
        return input.Select(Math.Sin).ToArray();
    }
}
然后电话会是:

var f = d.Sin();

注意:这并没有得到您想要的语法,也不能解决必须为每个相应的数学方法编写其中一个的问题,但我将在这里发布它,作为如何更优雅地扩展现有方法的答案。

为什么要重新发明轮子?
double[]result=d.Select(Math.Sin).ToArray()
我不知道有人能做到这一点。这会使事情变得更短。谢谢。这很简单!谢谢。这将如何推广到两个输入的函数?例如,Log(number,base)For result=d。Log(base)你可以添加更多参数,没问题,只有第一个参数上有
this
var f = d.Sin();