[英]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.Equals和String.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.