考虑下面的代码。看起来像完全有效的 C# 代码对吗?
//Project B
using System;
public delegate void ActionSurrogate(Action addEvent);
//public delegate void ActionSurrogate2();
// Using ActionSurrogate2 instead of System.Action results in the same error
// Using a dummy parameter (Action<double, int>) results in the same error
// Project A
public static class Class1 {
public static void ThisWontCompile() {
ActionSurrogate b = (a) =>
{
a(); // Error given here
};
}
}
我收到一个编译器错误“委托‘操作’不接受 0 个参数。” 使用 (Microsoft) C# 4.0 编译器在指定位置。请注意,您必须在不同的项目中声明 ActionSurrogate 才能显示此错误。
它变得更有趣:
// Project A, File 1
public static class Class1 {
public static void ThisWontCompile() {
ActionSurrogate b = (a) => { a(); /* Error given here */ };
ActionSurrogate c = (a) => { a(); /* Error given here too */ };
Action d = () => { };
ActionSurrogate c = (a) => { a(); /* No error is given here */ };
}
}
我在这里偶然发现了一个 C# 编译器错误吗?
请注意,对于非常喜欢使用 lambdas 并试图创建一个数据结构库以供将来使用的人来说,这是一个非常烦人的错误......(我)
编辑:删除了错误的案例。
我复制了我的原始项目并将其剥离到最低限度以实现这一目标。这实际上是我的新项目中的所有代码。