如何在C#中创建常量哈希集

How can I create a constant hashset in c#

本问题已经有最佳答案,请猛点这里访问。

现在,我有一个字符串常量数组,并通过循环检查值是否存在。但是我想要一个更有效的方法来存储我的价值。我知道有一个哈希集可以这样使用:

1
2
3
4
HashSet<string> tblNames = new HashSet<string> ();
tblNames.Add("a");
tblNames.Add("b");
tblNames.Add("c");

但是,是否可以使它成为类中的一个常量成员,如下所示:

1
public const HashSet<string> tblNames = new HashSet<string>() {"value1","value2" };


创建"常量"集的最佳方法可能是使用以下方法将您的HashSet公开为其IEnumerable接口:

1
public static readonly IEnumerable<string> fruits = new HashSet<string> {"Apples","Oranges" };
  • public:每个人都可以访问它。
  • static:内存中只有一个副本,不管创建了多少父类实例。
  • readonly:不能重新赋值。
  • IEnumerable<>:只能遍历其内容,不能添加/删除/修改。

要搜索,您可以使用LINQ在您的IEnumerable上调用Contains(),并且它足够聪明,知道它由HashSet支持,并委托适当的调用来使用您的集合的散列性质。(好吧,好吧,它通过ICollection调用它,但最终还是出现在哈希集的重写方法中)

1
2
3
4
5
Debug.WriteLine(fruits.Contains("Apples")); // True
Debug.WriteLine(fruits.Contains("Berries")); // False

fruits = new HashSet<string>(); // FAIL! readonly fields can't be re-assigned
fruits.Add("Grapes"); // FAIL! IEnumerables don't have Add()