我想创建获取函数和对象(某种类型)并返回bool值的IValueConverter。
如何在运行时转换函数和参数?
public object EvaluateByValue(object MyFunc, object parameter)
{
return MyFunc(parameter);
}
例如:
Func<int,bool> MyIntFunction = i=>return i%2;int number = 8;
bool IsEvan = (bool)EvaluateByValue(MyIntFunction,8);
另一种用途可以是:
Func<string,bool> MyStringFunction = txt=>txt=="Hello";
bool IsWelcome = (bool)EvaluateByValue(MyStringFunction,"Goodbye");
有没有办法施放&#34; Func&#34;参数类型的方法?
由于
答案 0 :(得分:1)
我会将您的方法更改为以下内容:
public object EvaluateByValue(Delegate MyFunc, params object[] parameters)
{
return MyFunc.DynamicInvoke(parameters);
}
答案 1 :(得分:0)
如果演员阵容是您唯一的问题,那么您可能正在寻找的是:
var myFuncDelegate = (Func<object, bool>)parameter;
如果您希望Func的参数类型与给定参数相同,则必须使用反射来转换委托并执行它。
答案 2 :(得分:0)
最小的变化量是:
public object EvaluateByValue(Func<object, object> MyFunc, object parameter)
{
return MyFunc(parameter);
}
或允许多个参数:
public object EvaluateByValue(Func<object[], object> MyFunc, params object[] parameter)
{
return MyFunc(parameter);
}
虽然我不确定你要做什么。
答案 3 :(得分:0)
您可以为函数声明
执行类似的操作 static K EvaluateByValue<T, K>(Func<T, K> MyFunc, T parameter)
{
return MyFunc(parameter);
}
T
是参数类型,K
是返回类型
所以,让我们说你有这个想要传递的功能
static string parameterFunction(string param)
{
return param + " World!";
}
你会这样称呼它
var answer = EvaluateByValue<string, string>(parameterFunction, "Hello");
而answer
将为Hello World!