namespace FuncDictonaryTest
{
internal class Program
{
private Dictionary<Func<bool>,
string> FunctionDictonary = new()
{
{ TestA, "Hello" },
{ TestB, "Byebye" }, // Not working
};
private Dictionary<Func<bool>,
string> FunctionDictonaryTwo;
Program()
{
FunctionDictonaryTwo = new() // Working
{
{ TestA, "Hello" },
{ TestB, "Byebye" }
};
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
private bool TestA()
{
return true;
}
private bool TestB()
{
return false;
}
}
}
您实际上应该在这里遇到两个错误,第二个解释了实际问题(Demo
):
ERRORCS1921:“ program..testa()”的最佳超载方法匹配对初始化器元素的签名错误。最初的添加必须是可访问的实例方法。TestA
,则误差变得更加明显(demo
() => TestA()
ERRORCS0236:字段初始化器无法引用非静态字段,方法或属性'program.testa()' 错误CS0236:字段初始化器无法引用非静态字段,方法或属性'program.testb()'
您不能在字段/属性初始化器中使用非静态成员。