我在我的程序中使用字典就像这样
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)
这段代码不能正常工作..
问题出在这里:
if (!dictionary[term].Contains(TT))
{
dictionary[term].Add(TT);
}
Run Code Online (Sandbox Code Playgroud)
List.Contains
if类Term
未实现的默认行为IEquatable<Term>
是检查引用相等性.由于您刚构建的对象不能已在列表中,因此Contains
将始终返回false
并Term
始终添加新对象.
一个好的解决办法是实现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)
归档时间: |
|
查看次数: |
913 次 |
最近记录: |