2013-08-28 48 views
2

我的類實現IEnumerable。而這兩種方式的代碼GetEnumerator方法可以被編譯:GetEnumerator:返回或收益返回

public IEnumerator GetEnumerator() 
{ 
    yield return Database[id].GetEnumerator(); 
} 

public IEnumerator GetEnumerator() 
{ 
    return Database[DatabaseId].GetEnumerator(); 
} 

其中數據庫[ID]是列表。這些實現有什麼區別?

回答

6

編譯的原因是因爲你不清楚枚舉是什麼。如果你讓通用變得更加明顯:

public IEnumerator<Foo> GetEnumerator() 
{ 
    return Database[id].GetEnumerator(); 
} 

VS

public IEnumerator<IEnumerator<Foo>> GetEnumerator() 
{ 
    yield return Database[id].GetEnumerator(); 
} 

yield return版本沒有產生結果:它產生迭代 - 這是一個迭代器的,迭代,一個枚舉員的枚舉。而不是一個好辦法。基本上,「不要那樣做」。