我不明白为什么这段代码错了,我只想在字典中封装空格。
private delegate void LotIs(string path);
private Dictionary<int, LotIs> lots = new Dictionary<int, LotIs>
{
{0, this.LotIsBanHummer},
{1, this.LotIsDuck},
{2, this.LotIsToy},
{3, this.LotIsDragon},
{4, this.LotIsMoney}
};
private void LotIsBanHummer(string path)
{
lotImage.Image = LB10_VAR7.Properties.Resources.banhammer2;
StreamReader str = new StreamReader(path + "BunHummer.txt");
textBox1.Text = str.ReadToEnd();
textBox3.AppendText(textBox1.Lines[1].Split(' ')[1]);
}
答案 0 :(得分:2)
编译器不允许您在此类初始化表达式中使用this
,因为在计算表达式时,假定this
未初始化。请记住,在执行任何构造函数之前,会对这些表达式进行求值。
在构造函数中,任何时候都允许使用 this ,即使某些字段可能尚未初始化,但是在那里,您有责任不访问任何未初始化的成员。
因此,在您的情况下,解决方案是初始化您的字典/在构造函数中添加初始内容(或者,在几个构造函数的情况下,在您从每个构造函数调用的方法中)。
答案 1 :(得分:2)
来自C#规范:
<强> 17.4.5.2 实例字段初始化
实例字段的变量初始化程序无法返回 正在创建的实例。因此,引用它是编译时错误 变量初始值设定项中的
this
,因为它是a的编译时错误 变量初始值设定项通过a引用任何实例成员 简单名称
但是,您可以将初始化器移动到构造函数中。
答案 2 :(得分:0)
在构造函数中使用this
来定义Dictionary
。
private Dictionary<int, LotIs> lots = new Dictionary<int, LotIs>();
public YourClass() {
lots[0] = this.LotIsBanHummer;
lots[1] = this.LotIsDuck;
lots[2] = this.LotIsToy;
lots[3] = this.LotIsDragon;
lots[4] = this.LotIsMoney;
}
如果LotIsBanHummer
,LotIsDuck
等定义为static
,那么您可以在没有this
的情况下进行初始化。