我如何使用传入对象的Func <t,bool>?</t,bool>

时间:2014-04-03 18:29:30

标签: c# wpf generics ivalueconverter

我想创建获取函数和对象(某种类型)并返回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;参数类型的方法?

由于

4 个答案:

答案 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!