-1

HashSet1 ~ 10 の整数を追跡する を含むクラスを作成しました。メソッドを使用して、ブール値を使用しContainて値が に挿入されているかどうかを確認しました。HashSetこれが私のコードです:

class BasicIntSet
{
    HashSet<int> intTest = new HashSet<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    bool has4 = intTest.Contains(4);    // Returns true
    bool has11 = intTest.Contains(11);  // Returns false
    bool result = intTest.IsSupersetOf(new[] { 4, 6, 7 });
}

私の問題は、次のエラーが表示されることです"Error 1 A field initializer cannot reference the non-static field, method, or property"

私が間違っていることを誰かが知っていますか?

4

1 に答える 1

4

すべてのコードはクラス宣言に含まれています...インスタンスフィールドを宣言しています。あるインスタンスフィールド初期化子に別のインスタンスフィールド初期化子を参照させる(またはthis他の方法で参照させる)ことはできないため、エラーが発生します。

修正は簡単です-コードをメソッドに入れます:

using System;
using System.Collections.Generic;

class BasicIntSet
{
    static void Main()
    {
        HashSet<int> intTest = new HashSet<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        Console.WriteLine(intTest.Contains(4)); // True
        Console.WriteLine(intTest.Contains(11)); // False
        Console.WriteLine(intTest.IsSupersetOf(new[] { 4, 6, 7 })); // True
    }
}

元のエラーはまったく関係がないことに注意してくださいHashSet<T>。これが私が考えることができる最も簡単な例です:

class BadFieldInitializers
{
    int x = 10;
    int y = x;
}

これも同じエラーになります。これも、1つのフィールド初期化子(のy)がthis暗黙的に参照しているためです。

于 2013-02-14T20:53:52.867 に答える