获取错误使用HashSet

时间:2013-02-14 20:51:59

标签: c# hashset

我创建了一个包含HashSet的类来跟踪1-10的整数。我使用Contain方法检查是否在HashSet中插入了一个bool值。这是我的代码:

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"

有人知道我做错了吗?

1 个答案:

答案 0 :(得分: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;
}

这会产生同样的错误 - 因为同样,一个字段初始值设定项(y)会隐式引用this