-1

我创建了一个类,其中包含一个HashSet跟踪 1-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;
}

这给出了同样的错误 - 因为同样,一个字段初始化器(for )隐式y引用。this

于 2013-02-14T20:53:52.867 回答