2016-12-13 56 views
-3

我在检查一个对象是否已经在我的列表中,这个对象有一个带有值的属性。如果对象已经在列表中,我想返回对象并将这些值相加,然后将其放回列表中。如何获取对象,如果它已经在列表中?

这里是我的代码:

if (!uniqueList.Contains(element)) 
{ 
    uniqueList.Add(element); 
} 
else 
{ 
    elementOld = uniqueList ?? 
    elementOld.value += element.value; 
    uniqueList.add(elementOld); 
} 

我只需要两个帮助?在代码中。

+0

元素的类型是什么?你可以发布它的类定义吗?请添加所有的细节。 – Vinod

+0

实际上,如果'element'是一个对象,并且'uniqueList.Contains(element)'为true,那么'element'已经与列表中的对象相同,不需要获取它。但是如果你需要的仅仅是查找该对象的特定属性,那么'Contains'不适合你,你应该像'uniqueList.FirstOrDefault(x => x.Property == element.Property)然后将结果与'null'进行比较。无论如何,你想做什么?从你的代码看来,你想增加元素的值,然后再将它添加到列表**。 – Andrew

+0

“value”是定义元素是否已经在列表中或另一个元素中的属性?如果'elementOld'是列表中现有的'element',那么你所做的和'elementOld.value * = 2'相同。 – Andrew

回答

2

如果您知道该对象在列表中,则可以使用IndexOf()在列表中找到该对象的位置。

else 
{ 
    int index = uniqueList.IndexOf(element); 
    var myElement = uniqueList[index]; 
    //do whatever you want with it here, and you don't have to 
    //put it back afterwards, it will still be in your list. 
} 

编辑:正如安德鲁指出,如果你能找到的元素的索引列表与上面的代码,你已经在列表中该项目的参考。如果您没有参考清单中想要查找的确切对象,则必须将它的成员进行比较才能找到匹配,因为上面的代码将为索引返回-1。

+1

但是'myElement'只不过是另一个对'element'指向的同一个对象的引用?正如我上面所说的,如果你已经有'element',你不需要在任何地方找到它。但无论如何,我猜他没有确切的实例(所以'Contains'或'IndexOf'将不起作用)。 – Andrew

+0

就是你!我无法相信,我从来没有意识到,我已经更新了我的答案,包括你指出的内容。谢谢! – Sam07

相关问题