C# 循环字典中结构内的字符串

C# 循环字典中结构内的字符串,c#,.net,windows,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 Valu

我有一本字典如下:

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;
    }
Dictionary dataDict=newdictionary();
公共结构数据值
{
公共字符串值1;
公共字符串值2;
公共字符串值3;
公共字符串值4;
公共字符串值5;
公共字符串值6;
公共字符串值7;
公共字符串值8;
公共字符串值9;
公共字符串值10;
公共字符串值11;
公共字符串值12;
公共字符串值13;
公共字符串值14;
公共字符串值15;
公共字符串值16;
公众价值17;
公众价值18;
公众价值19;
公共字符串值20;
}

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

好的,您可以为dataValues编写一个客户枚举器,返回每个成员变量,甚至使用反射来检索所有字段。。。但是为什么不简单地使用
字典

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

public struct dataValues
    {
        public List<string> Values;
    }
另外,如果您的结构只是一个
列表
,请直接使用它,无需创建结构

因此,它将是
字典

然后

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

根据我的评论:使用
列表
,而不是那些字符串变量


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

使用集合的索引器

Dictionary<string, List<string>> dataDict = new Dictionary<string, List<string>>();
// initialization ...
String val20OfData1 = dataDict["Data1"][19];
Dictionary dataDict=newdictionary();
//初始化。。。
字符串val20ofdata=dataDict[“Data1”][19];

我不太确定你想做什么。无论如何,如果必须在结构中使用单独的字符串变量,可以通过以下方式使用反射:

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

使用
列表
而不是那些字符串变量。@Tim Schmelter我不能这样做,因为我需要按特定顺序分配/调用特定的值,而我不能用列表这样做。当然可以,列表是可索引的。阵列也是如此。
        dataValues dv = dataDict["yourKey"];
        Type dvT = dv.GetType();
        FieldInfo[] fis = dvT.GetFields();
        foreach (FieldInfo fi in fis)
        {
            MessageBox.Show(fi.GetValue(dv) as string);
        }