繁体   English   中英

如何使用Func <T,bool> 传入对象?

[英]How can I used Func<T,bool> that passed in object?

我想创建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");

有什么方法可以通过参数类型强制转换“ Func”方法?

谢谢

我将您的方法更改为以下内容:

public object EvaluateByValue(Delegate MyFunc, params object[] parameters)
{
    return MyFunc.DynamicInvoke(parameters);
}

如果演员表是您唯一的问题,也许您正在寻找的是:

var myFuncDelegate = (Func<object, bool>)parameter;

如果希望Func的参数类型与给定参数相同,则必须使用反射来强制转换并执行委托。

好吧, 最小更改量为:

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);
}

尽管我不确定您要做什么。

您可以对函数声明执行以下操作

 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!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM