如何在C#中将值初始化为HashSet<String[,]>

22

我正在使用VS 2008,需要知道如何初始化HashSet。我知道在初始化期间需要添加一些值到tblNames中。如何添加这些值?

System.Collections.Generic.HashSet<String[,]> tblNames;
            tblNames = new System.Collections.Generic.HashSet<string[,]>();

tblNames.Add(new String[0,0] {"tblCategory","CatName" ,}); // this is showing Error..
最终目的是防止用户输入重复值。我需要从不同的表格和不同的字段中进行查询,因此我使用动态查询来查询数据库。我需要将表名和列名存储在某个索引、值、值格式中,例如我的表名是tblCategory,字段名是CatName,那么我将在0,tblCategory,CatName的方式下存储该值。然后我将使用Ajax调用处理程序页面,在其中使用上述代码。在这里,我传递0以获取第一个值[表名和列名],1用于另一个表和字段,依此类推。所以我想到了使用这种方式。
请问我是否使用了正确的方法或者是否有其他方法可以实现防止用户输入重复值的目的?
谢谢,Harie

3
希望你知道,这种方式只会得到二维数组的“引用”相等性 - 因此,集合会将包含相同元素但不同数组的情况视为不同。如果这是您的意图,那就很好。否则,您可能需要编写自己的 IEqualityComparer<T> 实现,并让集合使用它。 - Ani
1
真的 需要一组二维字符串数组吗?自从我在80年代用BASIC编程以来,我想不起来我使用过多维字符串数组。我怀疑你实际想要的是不同的数据结构。如果你告诉我们你的目的,也许我们可以提供更好的建议。 - Gabe
谢谢您的回答,请查看我的更新问题。 - kbvishnu
4个回答

20

我想写代码,并假设它与中的代码相同。

HashSet<T> tblNames = new HashSet<T>(); // T should be same

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

或者简单地
HashSet<string> tblNames = new HashSet<string> {"a", "b", "c"};

或者

HashSet<String[,]> tblNames = new HashSet<String[,]> ();
// same logic you can add array here
tblNames.add(stringArray1);
tblNames.add(stringArray2);

或者再次
HashSet<String[,]> tblNames = new HashSet<String[,]> {stringArray1, strginArray2};

17

如果你想要在一个步骤中使用已知的值初始化HashSet,你可以使用类似于以下代码的方式:

HashSet<string[,]> tblNames;
string[,] stringOne = new string[1, 1];
string[,] stringTwo = new string[1, 1];

tblNames = new HashSet<string[,]> { stringOne, stringTwo };

这被称为集合初始化器。它是在C# 3.0中引入的,其中包括以下元素:

  • 一系列对象初始化器,由{}标记包围,并用逗号分隔。
  • 元素初始化器,每个初始化器都指定要添加到集合对象中的元素。

请注意,元素类型是一个二维字符串数组。 - Ani
@Ani:是的,它的工作方式相同。不过,如果我更加关注问题的话会更好。谢谢! - Cody Gray

7

4
tblNames.Add(new [,] { { "0", "tblAssetCategory" }});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接