为什么这个字典不保存数据 - C#

本文关键字:数据 保存 字典 为什么 | 更新日期: 2023-09-27 18:30:38

我有一个文本文件的日期,形成变量nameSplit .下面的代码正在检查从文本文件到 nameSplit 的字符串以前是否已保存到字典中。如果是这样,那么它打印"Hoozah!",否则它将数据添加到数组并打印"失败"。但是,如果我在文本文件中输入名称"Jim"5 次,它只会输出"失败",尽管它应该在第二个条目中输出"hoozah!我不确定出了什么问题!

while (!sR.EndOfStream)
{
    string line = sR.ReadLine();
    string split = line.Split('$', ',')[1];
    string nameSplit = line.Split('.', ':')[1];
    Dictionary<string, decimal> names = new Dictionary<string, decimal>();
    // inside the loop
    decimal n = Convert.ToDecimal(split);
    if (names.ContainsKey(nameSplit))
    {
        names[nameSplit] += n;
        names.Add(nameSplit, n);
        Console.WriteLine("Hoozah!");
    }
    else
    {
        names.Add(nameSplit, n);
        Console.WriteLine("Failure");
    }


} sR.Close();
GC.Collect();
Thread.Sleep(66);

数据:

    吉姆: $22.00, 2. 吉姆: $2100.00, 3. 吉姆: $6.00, 4. 吉姆: $32.00,
  1. 5. 吉姆: $2.00,

为什么这个字典不保存数据 - C#

在循环之外定义字典。 现在你只是在每个循环上创建一个新字典,基本上忘记了前一个循环的结果。

Dictionary<string, decimal> names = new Dictionary<string, decimal>();
while (!sR.EndOfStream)
{
    ...
}

编辑

根据您的数据,您实际上需要拆分每行上的"条目"并循环访问它们。 假设有多个行具有类似的格式,您需要执行以下操作。

Dictionary<string, decimal> names = new Dictionary<string, decimal>();
while (!sR.EndOfStream)
{
    string line = sR.ReadLine();
    var entries = line.Split(new []{','}, StringSplitOptions.RemoveEmptyEntries);
    foreach(var entry in entries)
    {       
        decimal amount = decimal.Parse(entry.Split('$')[1]);
        string nameSplit = entry.Split('.', ':')[1].Trim(); 
        if (names.ContainsKey(nameSplit))
        {
            names[nameSplit] += amount;
            Console.WriteLine("Hoozah!");
        }
        else
        {
            names.Add(nameSplit, amount);
            Console.WriteLine("Failure");
        }
    }
}

请注意,我重命名了一些变量并从名称中删除了空格,但主要是拆分逗号并迭代每个"条目"。 我不确定你为什么要保留美元金额的运行总和,但你可以在循环后使用这些金额。