![](/img/trans.png)
[英]How can I do a Func<object[],Expression<Func<T,bool>>> dynamic?
[英]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.