C# 用C同时重写类的多个函数#
也许这里的覆盖不是正确的术语。 我想扩展一些System.Math类函数来处理双数组 我目前正在做的是: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.长度]
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();