为什么我不能用“这个”。这里?

时间:2013-05-26 10:53:21

标签: c#-4.0 dictionary

我不明白为什么这段代码错了,我只想在字典中封装空格。

    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]);
    }

3 个答案:

答案 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;
}

如果LotIsBanHummerLotIsDuck等定义为static,那么您可以在没有this的情况下进行初始化。