我有一個匿名類的集合,我想返回一個空的列表。如何獲得集合的空列表?
什麼是最好的可讀表達式使用?
我雖然下面的,但我不認爲他們是可讀取足夠:
var result = MyCollection.Take(0).ToList();
var result = MyCollection.Where(p => false).ToList();
注:我不想清空集合本身。
任何建議!
我有一個匿名類的集合,我想返回一個空的列表。如何獲得集合的空列表?
什麼是最好的可讀表達式使用?
我雖然下面的,但我不認爲他們是可讀取足夠:
var result = MyCollection.Take(0).ToList();
var result = MyCollection.Where(p => false).ToList();
注:我不想清空集合本身。
任何建議!
請告訴我一下:
Enumerable.Empty<T>();
如果你真的想要一個列表,所以你可以自由地做這將返回一個空的枚舉是T類型:
Enumerable.Empty<T>().ToList<T>();
如果您想返回en空IEnumerable,這樣會更好。它相當於返回新列表
由於性能原因,您應該堅持您提出的第一個選項。
另一個會在返回一個空列表之前迭代整個集合。
因爲匿名類型在源代碼中沒有辦法創建一個列表。然而,有一種方法可以通過反思來創建這樣的列表。
鑑於你的第一個建議可行,應該表現良好 - 如果可讀性是唯一的問題,爲什麼不創建一個擴展方法:
public static IList<T> CreateEmptyCopy(this IEnumerable<T> source)
{
return source.Take(0).ToList();
}
現在你可以重構你的例子
var result = MyCollection.CreateEmptyCopy();
實際上,如果您使用通用擴展名,您甚至不必使用任何Linq來實現此目的,您已經通過T
public static IList<T> GetEmptyList<T>(this IEnumerable<T> source)
{
return new List<T>();
}
var emp = MyCollection.GetEmptyList();
相反匿名類型,也許是時候創造一個具體的? – Oded 2011-04-19 10:14:34
@Oded:是的,你是對的。謝謝。 – Homam 2011-04-19 10:29:39