2015-05-14 127 views
0

形勢在foreach循環編輯迭代值

我試圖設計如果傳入ID參數相匹配的記錄中的標識刪除對象的簡單刪除方法:

例如,如果Race有一個ID「123」,那麼它會找到ID爲「123」的種族並將其設置爲空,從而將其刪除。

我已經在網上看過幾種方法,是的,它似乎是一個反覆出現的問題與foreach具體,但我真的想這樣做,如果可能的話。

public void removeRace(string RaceID) 
      { 

       foreach (BaseRace br in races) 
       { 
        //if the ID entered into this method as a parameter matches an ID on record. 
       if (RaceID == br.raceID) 
       { 
        //set the current ID to null, thus deleting the record. 
        //br = null; 

       } 
      } 
     } 

問題

我的代碼,具體br = null;不起作用,因爲foreach循環不會讓我編輯的迭代器。

如何以其他方式解決此問題?

+0

「種族」是什麼類型? – MarcinJuraszek

+0

比賽是一個BaseRaces列表 – Method

+0

請列出你嘗試過的其他方法以及爲什麼它不起作用的原因。 (我假設你已經搜索過類似https://www.bing.com/search?q=c%23+remove+item+list+foreach的其他已知方法)。 –

回答

4

List<T>已經提供了方法,這樣做:

public void removeRace(string RaceID) 
{ 
    races.RemoveAll(br => RaceID == br.raceID); 
} 

如果你真的不想使用它,你就必須使用for循環,而不是foreach

+0

你能舉個例子嗎?我想我會使用第一個建議,因爲它代碼更簡潔。 但是一個例子會很酷。 – Method

0

你應該可以用Linq做得相當簡單。

var filter = races.Where(d => d.Id != value).ToList(); 

這將佔一個值,它會刪除。你也可以做一個投影,用SelectManyWhere這個頂點也可以過濾。將需要更多的上下文。

這種方法可能並不理想,Marcin的方法可能會更理想。儘管需要更多的背景。

+0

什麼是Linq?抱歉,我對編程比較陌生,人們不斷提及它。 – Method