0

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

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

3 回答 3

2

编译器不允许您this在这样的初始化表达式中使用,因为this在计算表达式时假定未初始化。请记住,在执行任何构造函数之前对此类表达式进行评估。

在构造函数中,任何时候都允许使用this,即使某些字段可能还没有被初始化,但是在那里,你有责任不访问任何未初始化的成员。

因此,在您的情况下,解决方案是初始化您的字典/在构造函数中添加初始内容(或者,在多个构造函数的情况下,在您从每个构造函数调用的方法中)。

于 2013-05-26T11:06:42.707 回答
2

从 C# 规范:

17.4.5.2 实例字段初始化

实例字段的变量初始化器不能引用正在创建的实例。因此, this在变量初始化器中引用是编译时错误,因为变量初始化器通过简单名称引用任何实例成员是编译时错误

但是,您可以将初始化程序移至构造函数。

于 2013-05-26T11:10:52.813 回答
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, LotIsDucketc 被定义,static那么您可以在没有this.

于 2013-05-26T11:00:44.373 回答