现在,我有一个由字符串组成的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" };
答案 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()