gpt4 book ai didi

c# - 无法从 'method group' 转换为 'Func'

转载 作者:太空狗 更新时间:2023-10-29 21:38:27 27 4
gpt4 key购买 nike

我正在实现一个非常简单的规则引擎,它在运行时动态地执行一些规范。

实际规则存储在元组中,我无法将委托(delegate)存储到 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 .

以下代码无法编译并发出 Cannot convert from 'method group' to 'Func<string, string, bool>' Visual Studio 中的错误消息。

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

我在问这个问题之前搜索过,但我无法理解How do I fix 'compiler error - cannot convert from method group to System.Delegate'?中提供的答案。或 Cannot convert from method group to System.Func<string> .我不知道如何将这些应用到我的问题。

最佳答案

String.EqualsString.EndsWith具有不同的方法签名,必须以不同的方式调用。

具体来说,String.Equals 是静态的,接受两个字符串并返回一个 bool 值。 String.EndsWith 是一个接受一个字符串并返回一个 bool 的实例方法

您可以通过将 String.EndsWith 调用包装在 lambda 中以更改签名以采用两个字符串并返回一个 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> .你可能会发现这个 answer about what is a method group helpful了解错误消息。

关于c# - 无法从 'method group' 转换为 'Func<string, string, bool>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com