0
        Dictionary<string, string> f = new Dictionary<string, string>();
        Dictionary<int, Dictionary<string, string>> lines = new Dictionary<int, Dictionary<string, string>>();

        while ((line = sr.ReadLine()) != null)
        {
            lineArr = line.Split(',');
            int x = 0;
            foreach (string field in lineArr)
            {
                f.Add(keys[x], field);
                x++;
            }
            lines.Add(lineIndex, f);
            f.Clear();
            lineIndex++;

ディクショナリ f は一時的なもので、その値を別のディクショナリ内に保存したいのですが、Clear() すると、ディクショナリ行の値が失われ、何らかの参照が提供されると思います。これを解決する方法はありますか?

4

2 に答える 2

8

の宣言をfループ内に移動します。そうすれば、毎回空にする必要がなくなり、参照はそのまま残ります。

Dictionary<int, Dictionary<string, string>> lines = new Dictionary<int, Dictionary<string, string>>();

while ((line = sr.ReadLine()) != null)
{
    Dictionary<string, string> f = new Dictionary<string, string>();

    lineArr = line.Split(',');
    int x = 0;
    foreach (string field in lineArr)
    {
        f.Add(keys[x], field);
        x++;
    }
    lines.Add(lineIndex, f);

    lineIndex++;
于 2012-04-12T15:54:10.400 に答える
2

変数fは、オブジェクトへの参照を保持しDictionary<string, string>ます。それを別の辞書に追加すると、新しいオブジェクトは作成されず、同じオブジェクトへの別の参照のみが作成されます。

f = new Dictionary<string, string>()ここでは、抵抗を最小限に抑える方法として、そのまま使用することを強くお勧めします.

于 2012-04-12T15:55:23.957 に答える