将keyvaluepair从文件添加到Dictionary?

时间:2013-02-12 19:43:47

标签: c# dictionary add

我正在尝试将.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();
    }

3 个答案:

答案 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)); - 如果您知道数据的格式,则应使用该信息。