0

.txt ファイルから .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();
    }
4

3 に答える 3

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

于 2013-02-12T19:47:06.123 に答える
2

最初に間違っています。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();
于 2013-02-12T19:47:53.113 に答える
1

コードの差し迫った問題は、クエリ式にのみ存在することです...シーケンスには、およびプロパティvaluesを持つ匿名型である要素型があります。KeyValue

次の問題は、最初は空になる を反復処理していることです...また、 からにscoreList変換する予定の場所も示されません。ああ、何か役に立つかどうかはわかりません。stringDateTimeDictionary<,>.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.ParseExactjust の代わりに を使用していることに注意DateTime.Parseしてください。データの形式がわかっている場合は、その情報を使用する必要があります。

于 2013-02-12T19:48:20.093 に答える