2011-12-12 16 views
0

假設您有一個List l_mur = new List();如何找到條件符號的索引&&

然後填充列表。

然後根據要刪除一些值,而無需重新查詢條件...

l_mur.RemoveAt(l_mur.FindIndex(f => (f.xid == tmur.xid && f.sid == tmur.sid && f.mid == tmur.mid && f.bid == tmur.bid))); 

不過,我這裏使用的代碼,似乎沒有工作。它告訴我索引超出範圍,但如果我只是在尋找真正存在的東西,它怎麼會超出範圍。

回答

3

List<T>.FindIndex()如果沒有找到匹配,則返回-1 - 這超出了List<T>.RemoveAt()的範圍。

還要注意的是FindIndex()只返回基於您的謂語第一出現的索引 - 如果有一個以上的比賽,你只能刪除它們的第一個與你目前的做法。

一種更好的方法來代替基於謂詞刪除將RemoveAll()

l_mur.RemoveAll(f => (f.xid == tmur.xid && f.sid == tmur.sid && f.mid == tmur.mid && f.bid == tmur.bid)); 
1

可能是一個好主意是名單中篩選列表中的一個新實例:

var l_mur = l_mur.Where(f => (f.xid != tmur.xid || f.sid != tmur.sid || f.mid != tmur.mid || f.bid != tmur.bid)); 
0

使用該代碼:

l_mur.Remove(l_mur.Find(f => (f.xid == tmur.xid && f.sid == tmur.sid && f.mid == tmur.mid && f.bid == tmur.bid)));