【发布时间】:2011-04-08 14:38:36
【问题描述】:
我想找到一种方法将表达式(如果可能,编译)作为参数传递给函数。 表达式将始终返回相同的类型。我想将该表达式(函数)保存为参数。
如果可能的话,一个(简短的)示例将非常感激。 :-) 不知道有没有可能。
更多信息:输入是一个表达式,其中只有返回类型应该是固定的。我需要一种方法来定义这种原型。
方法调用示例:
public delegate double[] ValueRetreiverFunc(params object[] anyNumberOfParams);
public class Class1
{
public double[] Func()
{
double[] values = new double[1];
values[0] = 2.0;
return values;
}
}
public class Class2
{
public double[] Func(int n)
{
double[] values = new double[n];
for (int c = 0; c < n; c++)
{
values[c] = 3.0;
}
return values;
}
}
public class ClassTest
{
public ValueRetreiverFunc ValueRetreiverFunc { get; set; }
public void SetValueRetreiverFunc(ValueRetreiverFunc valueRetreiverFunc)
{
ValueRetreiverFunc = valueRetreiverFunc;
}
static void Test()
{
ClassTest classTest = new ClassTest();
Class1 class1 = new Class1();
Class2 class2 = new Class2();
classTest.SetValueRetreiverFunc(()=> class1.Func());
DoProcessArrayOfDouble(classTest.ValueRetreiverFunc());
classTest.SetValueRetreiverFunc(()=> class2.Func(7));
DoProcessArrayOfDouble(classTest.ValueRetreiverFunc());
}
}
【问题讨论】:
-
您最好使用反射检查该方法,因为您可以在那里轻松地提供动态参数数组。
-
那么,您是说希望能够将 Func() 或 Func(int) 作为同一个参数传递给方法?
-
致 aswyer :谢谢,我可能会这样做。但我想知道 Expression 类是否不适合?
-
致 Tejs:部分正确。的种类。我认为不止于此。它更像是一个表达式,因为参数的值在赋值时是固定的。可能是我的样本不够好。
标签: c# lambda delegates overloading func