2016-07-05 55 views
1

我想從List<string[]>刪除項目,但刪除屬性不起作用,但如果我使用RemoveAt(0)(任何int硬編碼的值),那麼它的工作......什麼可以成爲問題。誰能幫我?從列表中刪除項目<string[]>或獲取任何項目的任何位置的索引

這裏是我的代碼...

List<string[]> ipcol1 = new List<string[]>(); 
ipcol1.Add(new string[] { "test1" }); 
ipcol1.Add(new string[] { "test2" }); 
ipcol1.Add(new string[] { "test3" }); 
ipcol1.Add(new string[] { "test4" }); 
ipcol1.Remove(new string[] { "test1" }); 

int i = ipcol1.IndexOf(new string[] { "test4" }); 
ipcol1.RemoveAt(i); 

或者,如果我試圖採取perticular項目的索引,然後它給我(-1)的結果......如果我能得到這個問題的指標那麼我的問題可以解決...請幫助我。

+0

添加到列表中的字符串數組與您在「IndexOf」中使用的字符串數組不同。它們可能具有相同的價值,但它們不是同一個實例。由於數組是*參考*類型,因此您的項目都不會相同。 –

回答

6

你有比較數組時使用SequenceEqual

List<string[]> ipcol1 = new List<string[]>(); 
    ipcol1.Add(new string[] { "test1" }); 
    ipcol1.Add(new string[] { "test2" }); 
    ipcol1.Add(new string[] { "test3" }); 
    ipcol1.Add(new string[] { "test4" }); 

    ipcol1.RemoveAll(array => array.SequenceEqual(new string[] { "test1" })); 

或者(如果你想刪除它包含"test1"某處陣列的任何記錄):

ipcol1.RemoveAll(array => array.Any(item => item == "test1"))); 

的原因是兩個如果他們有相同的參考

string[] array1 = new string[0]; 
    string[] array2 = array1; 
    string[] array3 = new string[0]; 

    // "Yes" - array1 and array2 reference to the instance 
    Console.WriteLine((array1 == array2) ? "Yes" : "No"); 
    // "No" - array1 and array3 are references to different instances 
    Console.WriteLine((array1 == array3) ? "Yes" : "No"); 

    // "Yes" - array1 and array3 are equal sequences 
    Console.WriteLine((array1.SequenceEqual(array3)) ? "Yes" : "No"); 
0

數組是引用類型。下面的代碼失敗,因爲您正在比較兩個單獨實例的引用。可以使用SequenceEqual來比較收藏。

相關問題