我在我的程序中使用字典
Dictionary<string, List<Term>>
哪个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);
}
这段代码不能正常工作..
答案 0 :(得分:6)
问题在于:
if (!dictionary[term].Contains(TT))
{
dictionary[term].Add(TT);
}
如果类Term
未实现IEquatable<Term>
,List.Contains
的默认行为是检查引用相等性。由于您刚刚构建的对象不在列表中,Contains
将始终返回false
,并且将始终添加新的Term
。
一个好的解决方案是在Term
中实施IEquatable<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);
}
答案 1 :(得分:1)
我假设一个术语对象由它的id标识。因此,您需要在术语类上实现IEquatable<Term>
,或者查找具有正确ID的术语,如下所示:
if (!dictionary[term].Any(x => x.Id == TT.id))
{
dictionary[term].Add(TT);
}
注意:任何是Linq扩展方法,因此您需要添加using System.Linq;
答案 2 :(得分:-1)
static void Main(string[] args)
{
//Database producten
Dictionary<string, double> producten = new Dictionary<string, double>();
Console.WriteLine("Dit zijn de beschikbare producten");
producten.Add("T-shirt", 45.35);
Console.WriteLine("T-shirt");
producten.Add("trui", 25.50);
Console.WriteLine("trui");
producten.Add("broek" , 90);
Console.WriteLine("broek");
//Einde database
//Console.WriteLine(producten["trui"]);
double tot = 0;
bool boot = true;
Dictionary<string, int> winkelmandje = new Dictionary<string, int>();
while (boot)
{
Console.WriteLine("Wilt u een product toevoegen?, ja of nee?");
string answer = Console.ReadLine();
if (answer == "ja")
{
Console.WriteLine("Geef de naam van het product?:");
string naam = Console.ReadLine();
Console.WriteLine("Hoeveel aantallen wenst u van dit product?:");
int inthvl = Convert.ToInt32(Console.ReadLine());
winkelmandje.Add(naam, inthvl);
}
if (answer == "nee")
{
foreach(KeyValuePair<string, int> product in winkelmandje)
{
if (producten.ContainsKey(product.Key))
{
tot = tot + producten[product.Key] * product.Value;
}
else
{
Console.WriteLine("Dit product verkopen wij niet.");
}
}
boot = true;
Console.WriteLine("Gelieve " + tot + " euro te betalen.");
}