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

时间:2019-04-03 01:30:32

标签: c# hashset

现在,我有一个由字符串组成的const数组,并循环遍历以检查值是否存在。但是我想要一种更有效的方式来存储我的价值观。我知道有一个哈希集可以像这样使用:

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

但是,有可能使它成为此类的不变成员吗?

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

1 个答案:

答案 0 :(得分:1)

创建“常量”集的最佳方法可能是使用以下内容公开您的HashSet作为其IEnumerable接口:

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

要进行搜索,您可以使用LINQ在Contains()上调用IEnumerable,它很聪明,知道它得到HashSet的支持,并委派了正确的调用以利用散列设置的性质。 (好吧,it calls it via ICollection,但无论如何都会以HashSet的重写方法结束)

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()