在c#字典中使用对象

yam*_*mon 1 c# dictionary

我在我的程序中使用字典就像这样

Dictionary<string, List<Term>>
Run Code Online (Sandbox Code Playgroud)

哪个Term是来自class的对象有两个字段(name,id)我需要将新对象添加到字典中,其中在字典中找不到新对象的名称...如果新对象中的字段名称作为旧对象的名称存在我不会添加它..你可以帮助我使用的代码是

 foreach (string term in terms)
    {
        if (!dictionary.ContainsKey(term))
        {
            dictionary.Add(term, new List<Term>());
        }

        Term TT=new Term(i,name);
        if (!dictionary[term].Contains(TT))
        {
            dictionary[term].Add(TT);


        }
Run Code Online (Sandbox Code Playgroud)

这段代码不能正常工作..

Jon*_*Jon 6

问题出在这里:

    if (!dictionary[term].Contains(TT))
    {
        dictionary[term].Add(TT);
    }
Run Code Online (Sandbox Code Playgroud)

List.Containsif类Term未实现的默认行为IEquatable<Term>是检查引用相等性.由于您刚构建的对象不能已在列表中,因此Contains将始终返回falseTerm始终添加新对象.

一个好的解决办法是实现IEquatable<Term>Term并指定要在平等的标准IEquatable<Term>.Equals方法.

另一个解决方案(可能不太理想,因为它只会帮助这段特定的代码工作)是将测试更改为

    // Change the t.name == TT.name test to whatever your idea
    // of "term X equals term Y" is
    if (dictionary[term].FindIndex(t => t.name == TT.name) == -1)
    {
        dictionary[term].Add(TT);
    }
Run Code Online (Sandbox Code Playgroud)