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

相關問題