将键值对从文件添加到字典
本文关键字:字典 添加 文件 键值对 | 更新日期: 2023-09-27 17:58:55
我正在尝试将.txt文件中的值导入到我的dictionary
中。 .txt文件的格式如下:
唐老鸭, 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();
}
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.Parse
将值转换为DateTime
首先你做错了,你应该从列表中添加项目,而不是 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();
代码的直接问题是values
只存在于查询表达式中......序列具有一个元素类型,该元素类型是具有Key
和Value
属性的匿名类型。
下一个问题是你然后迭代scoreList
,一开始将是空的......而且也没有迹象表明您计划从string
转换为DateTime
的位置。哦,我不确定Dictionary<,>.Keys.ToString()
是否会给你任何有用的东西。
不过,您可以简单地构建字典:
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));
请注意使用 DateTime.ParseExact
而不仅仅是DateTime.Parse
- 如果您知道数据的格式,则应使用该信息。