我正在实现一个非常简单的规则引擎,它可以在运行时动态地强制执行一些规范。
实际的规则存储在元组中,我遇到了存储指向 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.EndsWith
开始说起 - 没有这样的方法,也就是说以下代码无法编译通过:bool test = string.EndsWith("ABC", "C");
,对吗? - Ivan Stoev