2011-04-19 64 views
6

我有一個匿名類的集合,我想返回一個空的列表。如何獲得集合的空列表?

什麼是最好的可讀表達式使用?

我雖然下面的,但我不認爲他們是可讀取足夠:

var result = MyCollection.Take(0).ToList(); 

var result = MyCollection.Where(p => false).ToList(); 

注:我不想清空集合本身。

任何建議!

+6

相反匿名類型,也許是時候創造一個具體的? – Oded 2011-04-19 10:14:34

+0

@Oded:是的,你是對的。謝謝。 – Homam 2011-04-19 10:29:39

回答

31

請告訴我一下:

Enumerable.Empty<T>(); 

如果你真的想要一個列表,所以你可以自由地做這將返回一個空的枚舉是T類型:

Enumerable.Empty<T>().ToList<T>(); 
+1

如果您想返回en空IEnumerable,這樣會更好。它相當於返回新列表()列表。 ToList 擴展方法在引擎蓋下做了一個新的List 。 – 2016-01-26 10:23:47

6

由於性能原因,您應該堅持您提出的第一個選項。

另一個會在返回一個空列表之前迭代整個集合。

因爲匿名類型在源代碼中沒有辦法創建一個列表。然而,有一種方法可以通過反思來創建這樣的列表。

9

鑑於你的第一個建議可行,應該表現良好 - 如果可讀性是唯一的問題,爲什麼不創建一個擴展方法:

public static IList<T> CreateEmptyCopy(this IEnumerable<T> source) 
{ 
    return source.Take(0).ToList(); 
} 

現在你可以重構你的例子

var result = MyCollection.CreateEmptyCopy(); 
10

實際上,如果您使用通用擴展名,您甚至不必使用任何Linq來實現此目的,您已經通過T

public static IList<T> GetEmptyList<T>(this IEnumerable<T> source) 
{ 
    return new List<T>(); 
} 

var emp = MyCollection.GetEmptyList(); 
相關問題