簡體   English   中英

無法從'方法組'轉換為'Func <string,string,bool>'

[英]Cannot convert from 'method group' to 'Func<string, string, bool>'

我正在實現一個非常簡單的規則引擎,它在運行時動態地強制執行某些規范。

實際規則存儲在元組中,我將string.EndsWith存儲到string.EndsWith函數時遇到問題。

以下代碼用於測試字符串相等性,並按預期返回False"A""B"不同):

var rule = new Tuple<string, Func<string, string, bool>, string>("A", string.Equals, "B");
Console.WriteLine(rule.Item2.Invoke(rule.Item1, rule.Item3));

但是,我無法弄清楚如何調整此代碼以使用string.EndsWith函數而不是string.Equals

以下代碼無法編譯並在Visual Studio中發出Cannot convert from 'method group' to 'Func<string, string, bool>'錯誤消息。

var rule = new Tuple<string, Func<string, string, bool>, string>("A", string.EndsWith, "B");
Console.WriteLine(rule.Item2.Invoke(rule.Item1, rule.Item3));

我在問這個問題之前做過搜索,但是我無法理解我如何解決'編譯錯誤 - 無法從方法組轉換為System.Delegate'中提供的答案 無法從方法組轉換為System.Func <string> 我不知道如何將這些應用於我的問題。

String.EqualsString.EndsWith具有不同的方法簽名,必須以不同方式調用。

具體來說,String.Equals是靜態的,需要兩個字符串並返回一個bool。 String.EndsWith是一個實例方法,它接受一個字符串並返回一個bool

您可以通過在lambda中包裝String.EndsWith調用來更改簽名以獲取兩個字符串並返回bool來解決您的問題:

var rule = new Tuple<string, Func<string, string, bool>, string>
    ("AB", (string a, string b) => a.EndsWith(b), "B");
Console.WriteLine(rule.Item2.Invoke(rule.Item1, rule.Item3));

通常,錯誤意味着編譯器無法將string.EndsWith解釋為Func<string, string, bool> 您可以找到有關什么是有助於理解錯誤消息的方法組的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM