gpt4 book ai didi

c# - 使用委托(delegate)和 Lambda 的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 07:45:29 25 4
gpt4 key购买 nike

作为在我正在开发的库中引入惰性格式化评估的一种方式,我定义了委托(delegate)

public delegate string MessageFormatterDelegate(string message, params object[] arguments);
public delegate string MessageFormatterCallback(MessageFormatterDelegate formatterDelegate);

和下面类的内容

public static class TestClass
{
public static string Evaluate(MessageFormatterCallback formatterCallback)
{
return (formatterCallback(String.Format));
}
}

然而,这已经够奇怪了:当从一个外部项目运行时,声明

Console.WriteLine(TestClass.Evaluate(message => message("{0},{1},{2}", 1, 2, 3)));

编译,失败并出现错误

Error   1   Delegate 'MessageFormatterDelegate' does not take 4 arguments

同时

Console.WriteLine(TestClass.Evaluate((MessageFormatterDelegate message) => message("{0},{1},{2}", 1, 2, 3)));

编译和工作没有问题,在控制台打印 1,2,3。为什么我必须在第二个 lambda 表达式中使用 MessageFormatterDelegate 类型来限定 message 参数?有什么办法可以避免这种行为?

最佳答案

更新:

该错误已在 C# 5 中修复。再次对给您带来的不便表示歉意,并感谢您的报告。


这似乎是此处描述的已知错误的重复:

'Delegate 'System.Action' does not take 0 arguments.' Is this a C# compiler bug (lambdas + two projects)?

有关详细信息,请参阅我对该问题的回答。

这里也有报道:

C# Parser Bug on delegate?

这个错误是我的错;我为这个错误道歉。我们将尝试在 C# 5 中进行修复。

如果您认为您确实发现了一个不同的错误,请告诉我们,我们将开始调查。

感谢您的报告,我很感激。

关于c# - 使用委托(delegate)和 Lambda 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9128171/

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