簡體   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