2013-02-23 69 views
1

我有這個類,其中我想實現IEnumerable能夠使用foreach()。 這裏是我的代碼通過我想我沒有做正確實現IEnumerable接口到我的類

public class SearchResult : IEnumerable<SearchResult> 
{ 

    string Name { get; set; } 
    int Rating { get; set; } 

    public IEnumerator<SearchResult> GetEnumerator() 
    { 
     return(this); 
    } 
} 
+4

對於'SearchResult'來說,實現'IE可計數' - 單個結果不是結果序列。你有什麼特別的理由想要讓單個結果看起來像單元素序列嗎? – 2013-02-23 17:25:35

+0

而不是IEnumerable ,它應該如何聲明?唯一相關的問題是能夠實現SearchResult類的IEnumerable接口。 – user2102802 2013-02-23 17:40:18

+1

關鍵是,想要在單個項目上使用foreach是很奇怪的。 *爲什麼*你想要實現這個接口? – 2013-02-23 17:43:38

回答

4

你可以這樣做:

public IEnumerator<SearchResult> GetEnumerator() 
{ 
    yield return this; 
} 

然而,它是不尋常的這樣一個對象來實現IEnumerable<T>並在單個返回其自身元素序列。

您可能需要創建一個實用的方法來代替:

public static IEnumerable<T> ToSequence<T>(T instance) 
{ 
    reutrn new[] { instance }; 
} 
+0

我特別喜歡陣列變體。對於這些簡單的情況(任何類型的清單)已經足夠,更清晰和更快,這種簡單的情況正在被濫用。 – usr 2013-02-23 18:29:40

0

如果你真的真的發誓,你需要這樣做:

SearchResult justOne = ... blah ...; 
foreach (SearchResult eachOne in justOne) { 
    ... blah ... 
} 

然後,你可以做到這一點小的修改,以你的方法(使用收益率而不是退貨):

public IEnumerator<SearchResult> GetEnumerator() 
{ 
    yield return(this); 
}