我如何使用传入对象的 Func

本文关键字:bool Func 何使用 对象 | 更新日期: 2023-09-27 17:56:42

我想创建获取函数和对象(某种)并返回布尔值的 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"方法?

谢谢

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

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

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

answerHello World!