实际上,您应该在这里得到两个错误(集合中的每个元素),第二个错误解释了实际问题(
demo @sharplab
):
错误CS1921:最佳重载方法与“程序”匹配。TestA()'的初始化器元素签名错误。可初始化的Add必须是可访问的实例方法。
如果你改变
TestA
到
() => TestA()
在现场初始化中,错误变得更加明显(
demo @sharplab
):
private Dictionary<Func<bool>, string> FunctionDictonary = new()
{
{ () => TestA(), "Hello" },
{ () => TestB(), "Byebye" },
};
错误CS0236:字段初始化器不能引用非静态字段、方法或属性“程序”。测试A()'
错误CS0236:字段初始化器不能引用非静态字段、方法或属性“程序”。测试B()'
不能在字段/属性初始化器中使用非静态成员。
The field docs
可以解释一下原因:
声明字段时,可以使用赋值运算符为字段赋予初始值。
字段在对象实例的构造函数被调用之前立即初始化。
还有
字段初始值设定项不能引用其他实例字段。
如果你愿意
测试A
和
TestB
方法
static
错误也会消失(
demo @sharplab
)