我想创建一个能够使用在Vector类(MathNet)上创建的多个扩展的方法。例如,我有Vector扩展名:如何为扩展创建委托?
public static bool IsNaN(this Vector<double> m)
{
int i = Array.IndexOf(m.ToArray(), double.NaN);
bool b = (i == -1);
b = !b;
return b;
}
我希望能够使用此扩展AS A PARAMETER。例如,我想写一些类似于:
public static Vector<double> ApplyExtension(this Matrix<double> x, VectorExtension myOperation)
{
Vector<double> res = new DenseVector(x.ColumnCount, 0);
for (int i = 0; i < x.ColumnCount; i++)
{
res[i] = x.Row(i).myOperation();
}
return res;
}
当然,“VectorExtension”不是一个明确定义的类型。我试图创建一个deleguate:
public delegate double VectorExtension(this Vector<double> d);
但是,它不起作用。有人能帮助我吗?非常感谢!
有一些inconsistancies这里。你使它通用,但没有使用泛型参数。 'res'也是'Vector',但返回类型是'Vector '。也许他们应该都是'Vector ',以及这个函数的参数? –
Servy
如果你想使它完全通用,看起来你需要泛型参数,'TSource'和'TResult',因为他在这里进行映射。 – Servy
@Servy非常感谢您的评论。我将添加映射。首先,我认为他正在做一些扁平化。 OPs不一致也很难纠正。 –