我正在尝试将.txt文件中的值导入我的dictionary
。 .txt文件的格式如下:
Donald Duck,2010-04-03
依此类推......每一行都有1个条目。当我尝试将拆分字符串添加到dictionary
。
我正在尝试这样:scoreList.Add(values[0], values[1]);
但是它说上下文中不存在名称。我希望有人可以指出我正确的方向......
谢谢!
private void Form1_Load(object sender, EventArgs e)
{
Dictionary<string, DateTime> scoreList = new Dictionary<string, DateTime>();
string path = @"list.txt";
var query = (from line in File.ReadAllLines(path)
let values = line.Split(',')
select new { Key = values[0], Value = values[1] });
foreach (KeyValuePair<string, DateTime> pair in scoreList)
{
scoreList.Add(values[0], values[1]);
}
textBox1.Text = scoreList.Keys.ToString();
}
答案 0 :(得分:3)
您的values
变量仅在LINQ查询中的范围内。您需要枚举查询结果,并将值添加到字典中:
foreach (var pair in query)
{
scoreList.Add(pair.Key, pair.Value);
}
话虽这么说,LINQ提供了一个ToDictionary
扩展方法,可以帮助你。你可以用以下代码替换你的循环:
scoreList = query.ToDictionary(x => x.Key, x => x.Value);
最后,要使类型更正,您需要使用例如DateTime
将值转换为DateTime.Parse
。
答案 1 :(得分:1)
首先你做错了,你应该从列表中添加项目而不是LINQ中使用的值[0]和值[1] ..
Dictionary<string, DateTime> scoreList = new Dictionary<string, DateTime>();
string path = @"list.txt";
var query = (from line in File.ReadAllLines(path)
let values = line.Split(',')
select new { Key = values[0], Value = values[1] });
foreach (var item in query) /*changed thing*/
{
scoreList.Add(item.Key, DateTime.Parse(item.Value)); /*changed thing*/
}
textBox1.Text = scoreList.Keys.ToString();
答案 2 :(得分:1)
代码的立即问题是values
仅存在于查询表达式中...您的序列具有元素类型,该类型是Key
的匿名类型, Value
属性。
接下来的问题是,您正在迭代scoreList
,这将从空开始......而且也没有任何迹象表明您计划从string
转换为{{ 1}}。哦,我不确定DateTime
是否会给你任何有用的东西。
你可以简单地构建字典:
Dictionary<,>.Keys.ToString()
请注意使用DateTime.ParseExact
而非var scoreList = File.ReadLines(path)
.Select(line => line.Split(','))
.ToDictionary(bits => bits[0], // name
bits => DateTime.ParseExact(bits[1], // date
"yyyy-MM-dd",
CultureInfo.InvariantCulture));
- 如果您知道数据的格式,则应使用该信息。