我有一本字典如下:
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结构中的所有字符串 - 如何实现?
答案 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);
}