我创建了一个包含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"
有人知道我做错了吗?
答案 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
。