我不得不處理來自我的控制的數據源在我的應用程序中拋出的數據集合。其中一些集合包含空值,我希望在它們打開我的代碼時立即將其過濾掉,而不是將空值檢查代碼散佈到整個地方。我想這樣做在一個可重用的通用方式,並寫了這個方法來做到這一點:刪除集合中的所有空值
public static void RemoveNulls<T>(this IList<T> collection) where T : class
{
for (var i = 0; i < collection.Count(); i++)
{
if (collection[i] == null)
collection.RemoveAt(i);
}
}
我知道在具體List類存在RemoveAll()
方法,可以像使用:
collection.RemoveAll(x => x == null);
但很多返回類型都是基於接口的(IList/IList ...)而不是具體的類型。
請您詳細說明爲什麼不能使用'RemoveAll'? – 2013-05-01 15:21:07
什麼是問題? – 2013-05-01 15:22:04
您編寫的代碼將不起作用,因爲刪除項目會將所有後續元素的索引向下移動1.每次刪除空值時,您的代碼都會跳過檢查下一個元素。 – 2013-05-01 15:25:59