2010-08-06 77 views
12

該方法通過yield return語句返回IEnumerable。如果yield yield從不發生,返回null?

如果yield語句永遠不會發生(它在條件邏輯中),那麼該方法是否會返回null,或者它是否會返回計數爲0的Enumerable?

回答

16

一個有效的IEnumerable,它在遍歷它時不會產生任何值。

想一想:您可以將IEnumerable生成器存儲在一個變量中 - 當您實際遍歷結果時,代碼本身會被執行。如果你有null,你如何執行代碼?或者你怎麼知道該函數沒有運行它就不會產生任何東西。

8

後者 - 你將能夠GetEnumerator()無論如何,那裏就沒有任何項目可以枚舉。這相當於Enumerable.Empty<T>

1

事實上,2.0程序員誰對大量使用枚舉倚將在他們的工具箱標準件:

public static IEnumerable<T> EmptyEnum<T>() 
{ 
    yield break; 
} 

System.Linq.Enumerable.Empty()之前走過來。在很多情況下非常有用,通常正是因爲它不返回null。例如,如果GetIntEnum()可以返回某種類型的IEnumerable類型,但也可以返回null,那麼GetIntEnum() ?? Enumerable.Empty<T>()會給我們一些總是安全可以枚舉的東西(假設這是空結果所期望的行爲)。