2013-02-23 79 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); 
}