我创建了一个嵌套字典,其中包含以下内容:
Dictionary<DateTime, Dictionary<string, string>> dateDict =
new Dictionary<DateTime, Dictionary<string, string>>();
然后我使用以下内容为此词典输入值:
while (reader.Read())
{
DateTime date = DateTime.Parse(reader["Event_Date"].ToString());
string name = reader["Event_Name"].ToString();
string guid = reader["Event_GUID"].ToString();
dateDict.Add(date, new Dictionary<string, string>());
dateDict[date].Add(name, guid);
}
我的问题是如何正确地从嵌套字典中取出变量?
我运行此循环以拉出值并将它们分配给DateTimePickers和TextFields:
for (int i = 0; i < dateDict.Count; i++)
{
DateTime keyVar = dateDict.ElementAt(i).Key;
eventDateBoxes[i].Value = keyVar;
eventTextBoxes[i].Text = dateDict[keyVar[]];
}
eventTextBoxes部分是我在如何从嵌套字典中提取值的问题,因此为什么代码的这部分是错误的/不完整的。
我不能使用元组,因为我使用的.NET低于4,似乎无法绕过自定义类来充当它自己的元组或多字典。
答案 0 :(得分:1)
这是你要做的基本概要:
foreach (var element in dateDict)
{
eventDateBoxes[i].Value = element.Key;
foreach (var subElement in element.Value)
{
eventTextBoxes[i].Text = subElement.Value;
}
}
正如其他人在评论中指出的那样,外部字典和文本框中的元素之间不存在一对一的关系,因为子元素中可能(可能)是多个条目。
答案 1 :(得分:1)
我会使用foreach
或LINQ查询。但是不清楚你想要的是DateTimePicker.Text
:
List<DateTimePicker> eventDateBoxes = dateDict
.Select(kv => new{
Date = kv.Key,
EventName = kv.Value["Event_Name"],
EventGuid = kv.Value["Event_GUID"],
})
.Select(x => new DateTimePicker{ Value = x.Date, Text = x.EventName })
.ToList();
答案 2 :(得分:1)
听起来你不需要Dictionary<DateTime, Dictionary<string, string>>
,因为内部字典中只有一个项目,你需要一个Dictionary<DateTime, Dictionary<string, Event>>
,其中Event
是一个包含你的类事件数据。类似的东西:
public class Event
{
public string Name {get; set;}
public string Guid {get; set;} // you could actually use the GUID type here!
}
然后您将其填充为:
while (reader.Read())
{
DateTime date = DateTime.Parse(reader["Event_Date"].ToString());
string name = reader["Event_Name"].ToString();
string guid = reader["Event_GUID"].ToString();
dateDict.Add(date, new Event() { Name = name, Guid = guid };
}
然后当您按密钥从词典中获取项目时:
var item = dateDict[someKey];
你可以得到你的名字和guid:
var name = item.Name;
var guid = item.guid;
此外,由于您是通过数字索引而不是按键遍历字典,因此您可能根本不需要字典。您可能需要做的就是为Date
添加Event
属性,然后只有List<Event>
。