首页 > 解决方案 > C# System.ArgumentException:已添加具有相同键的项

问题描述

有人可以建议我如何防止此错误。

错误在这里:dict.Add(sourse[i + 1], target[j + 1]);

using System.IO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            var sourse = File.ReadAllLines("1.txt", Encoding.Default);
            var target = File.ReadAllLines("2.txt", Encoding.Default);
            var dict = new Dictionary<string, string>();
            for (int i = 0; i < sourse.Length; i += 2)
            {
                for (int j = 0; j < target.Length; j += 2)
                {
                    if (sourse[i] == target[j])
                    {
                        dict.Add(sourse[i + 1], target[j + 1]);
                        break;
                    }
                }
            }
            var result = File.ReadAllLines("3.txt", Encoding.Default).ToList();
            for (int i = result.Count - 1; i >= 0; i--)
            {
                foreach (var item in dict)
                {
                    if (result[i].EndsWith(item.Key))
                    {
                        result.Insert(i - 1, item.Value);
                        break;
                    }
                }
            }
            File.WriteAllLines("result.txt", result, Encoding.Default);
        }
    }
}

我使用 Windows 7 64 位。这段代码过去可以正常工作。昨天停止工作。

标签: c#

解决方案


更改这部分代码:

if (sourse[i] == target[j])
{
    dict.Add(sourse[i + 1], target[j + 1]);
    break;
}

对此:

if (sourse[i] == target[j])
{
    if (!dict.ContainsKey(sourse[i + 1]))
    {
       dict.Add(sourse[i + 1], target[j + 1]);
    }
    break;
}

这将防止添加具有相同键的字典项


推荐阅读