莫尔斯到文本词典 - System.ArgumentException:已添加具有相同键的项目

本文关键字:添加 项目 ArgumentException 文本 System | 更新日期: 2023-09-27 18:35:05

正在创建程序将莫尔斯电码转换为文本和文本转换为莫尔斯电码。首先,它与字典中的基本查拉塞特一起工作:abcdefghijklmnoprstuvzy0123456789。比我想升级它以翻译我语言中的特殊字符,例如 ščťžýáíéôä?!:;。-_() .问题是当我把它写到我的字典中并给每个字符键时,它会抛出我 excpetion :System.ArgumentException:已经添加了具有相同键的项目。

这是我的阅读字典代码

private void ReadDictionary(string filename)
     {
      string cesta = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
        try {
           string[] lines = File.ReadAllLines(filename);
        if (lines != null) {
        }
                   foreach (string line in lines)
                {
                    string[] znaky = line.Split('=');
                    string key = znaky[0];
                    string value = znaky[1];
                    this.morzeovka.Add(key, value);
                    this.latinka.Add(value, key);
                }   
            }
          catch (IOException) {
             MessageBox.Show("Nepodarilo sa nacitat slovnik"+ Environment.NewLine + "Skontrolujete umiestnenie slovníka v:  "+cesta,"Chyba",MessageBoxButtons.OK,MessageBoxIcon.Error);
             System.Environment.Exit(1);
         }      
    }
}

这是我的字典

a=.-
b=-...
c=-.-.
d=-..
e=.
f=..-.
g=--.
h=....
i=..
j=.---
k=-.-
l=.-..
m=--
n=-.
o=---
p=.--.
q=--.-
r=.-.
s=...
t=-
u=..-
v=...-
w=.--
x=-..-
y=-.--
z=--..
1=.----
2=..---
3=...--
4=....-
5=.....
6=-....
7=--...
8=---..
9=----.
0=-----
.=.-.-.-
,=--..--
?=..--..
!=--..-
;=-.-.-.
:=---...
(=--...
)=-.--.-
""=.-..-.
-=-....-
_=..--.-
@=.--.-.
+=.-.-.
/=-..-.
'=.----.
á=.--.-
ä=.-.-
é=..-..
ö=---.
ü=..--
ň=--.--

这是完全例外

System.ArgumentException: An item with the same key has already been added.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)

感谢您的任何帮助,

PS:如果我没有发布足够的代码,就问我应该添加什么

莫尔斯到文本词典 - System.ArgumentException:已添加具有相同键的项目

此项目导致问题:

ň=--.--

在添加密钥之前,应包含一个条件来验证字典中是否已存在该键:

if (!morzeovka.ContainsKey(key))
{
    morzeovka.Add(key, value);
}
这对

我有用:

7 & ( 具有相同的代码--...

class Program
{
    static void Main(string[] args)
    {
        var pairsEnum =
             pairs
            .Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
            .Select(x => x.Split('='))
            .Select(x => new { Key = x[0].Trim(), Code = x[1].Trim() });
        var multipleKeys =
            pairsEnum
            .GroupBy(x => x.Key, (key, codes) => new { Key = key, Codes = codes })
            .Where(x => x.Codes.Count() > 1)
            .Select(x => new { Key = x.Key, Codes = x.Codes })
            .ToList();
        var multipleCodes =
          pairsEnum
           .GroupBy(x => x.Code, (code, keys) => new { Code = code, Keys = keys })
           .Where(x => x.Keys.Count() > 1)
           .Select(x => new { Keys = x.Keys, Code = x.Code})
           .ToList();
        var dic1 =
            pairsEnum
            .ToDictionary(x => x.Key, x => x.Code);
        // This will throw the same exception as in your example.
        var dic2 =
            pairsEnum
            .ToDictionary(x => x.Code, x => x.Key);
    }
    private static string pairs =
        @"
        a=.-
        b=-...
        c=-.-.
        d=-..
        e=.
        f=..-.
        g=--.
        h=....
        i=..
        j=.---
        k=-.-
        l=.-..
        m=--
        n=-.
        o=---
        p=.--.
        q=--.-
        r=.-.
        s=...
        t=-
        u=..-
        v=...-
        w=.--
        x=-..-
        y=-.--
        z=--..
        1=.----
        2=..---
        3=...--
        4=....-
        5=.....
        6=-....
        7=--...
        8=---..
        9=----.
        0=-----
        .=.-.-.-
        ,=--..--
        ?=..--..
        !=--..-
        ;=-.-.-.
        :=---...
        (=--...
        )=-.--.-
        """"=.-..-.
        -=-....-
        _=..--.-
        @=.--.-.
        +=.-.-.
        /=-..-.
        '=.----.
        á=.--.-
        ä=.-.-
        é=..-..
        ö=---.
        ü=..--
        ň=--.--";
}

要了解字典来源的问题,您可以添加简单的检查:

if (!morzeovka.ContainsKey(key))
{
    morzeovka.Add(key, value);
}
else
{
    Console.WriteLine("morzeovka duplicate: {0}", key);
}
if (!latinka.ContainsKey(value))
{
    latinka.Add(value, key);
}
else
{
    Console.WriteLine("latinka duplicate: {0}", value);
}

它将输出到控制台,重复词典满足。