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 に答える