循环遍历Dictionary中结构中的字符串

时间:2012-08-26 21:53:09

标签: c# .net windows

我有一本字典如下:

Dictionary<string, dataValues> dataDict = new Dictionary<string, dataValues>();

public struct dataValues
    {
        public string Value1;
        public string Value2;
        public string Value3;
        public string Value4;
        public string Value5;
        public string Value6;
        public string Value7;
        public string Value8;
        public string Value9;
        public string Value10;
        public string Value11;
        public string Value12;
        public string Value13;
        public string Value14;
        public string Value15;
        public string Value16;
        public string Value17;
        public string Value18;
        public string Value19;
        public string Value20;
    }

我希望能够通过指定字典键来迭代dataValues结构中的所有字符串 - 如何实现?

4 个答案:

答案 0 :(得分:2)

从我的评论中:使用List<String>代替那些字符串变量。

   @Tim Schmelter我不能这样做,因为我需要分配/调用特定的   按特定顺序排列的值,我不能用列表

使用集合的索引器。

Dictionary<string, List<string>> dataDict = new Dictionary<string, List<string>>();
// initialization ...
String val20OfData1 = dataDict["Data1"][19];

答案 1 :(得分:0)

那么,你可以为dataValues编写一个客户枚举器,它在术语中返回每个成员变量,甚至使用反射来检索所有字段......但为什么不简单地使用Dictionary<string, List<string>>

答案 2 :(得分:0)

为什么在结构中使用20个属性?最好将它们存储在List

public struct dataValues
    {
        public List<string> Values;
    }
你可以做点什么:

foreach(string value in dataDict["yourKey"].Values)
{
//do what ever you want with value here
}

另外,如果您的结构只是List,请直接使用它,不需要创建结构

因此,它将是Dictionary<string, List<string>>

然后

foreach(string value in dataDict["yourKey"])
    {
    //do what ever you want with value here
    }

答案 3 :(得分:0)

我不确定你要做什么。无论如何,如果你必须在你的struct中使用单独的字符串变量,你可以用这种方式使用反射:

        dataValues dv = dataDict["yourKey"];
        Type dvT = dv.GetType();
        FieldInfo[] fis = dvT.GetFields();
        foreach (FieldInfo fi in fis)
        {
            MessageBox.Show(fi.GetValue(dv) as string);
        }