2012-03-14 48 views
2

我有可以返回的项目列表或像这样如下(伪)单个项目的功能如何返回IEnumerable的<T>单个项目

IEnumerable<T> getItems() 
{ 
    if (someCondition.Which.Yields.One.Item) 
    { 
     List<T> rc = new List<T>(); 
     rc.Add(MyRC); 

     foreach(var i in rc) 
      yield return rc; 
    } 
    else 
    { 
     foreach(var i in myList) 
      yield return i; 
    } 
} 

第1部分似乎有点缺憾,希望使其可读

+0

卡住试图选择正确的答案,任何想法? – Kumar 2012-03-15 19:21:43

回答

8
IEnumerable<T> getItems() 
{ 
    if (someCondition.Which.Yields.One.Item) 
    { 
     yield return MyRC; 
    } 
    else 
    { 
     foreach(var i in myList) 
      yield return i; 
    } 
} 
6

你不需要做任何事情:

yield return MyRC; 

你正常返回的项目一个接一个,一个集合中不进行分组。

但是,如果它是一个IEnumerable<IList<T>>那么它是不同的。简单地返回此:

yield return new[] { singleItem }; 

,或者如果它是一个IEnumerable<List<T>>然后

yield return new List<T> { singleItem }; 
4

List<T>是不必要的。 yield关键字存在的原因。

IEnumerable<T> getItems(){ 
    if (someCondition.Which.Yields.One.Item) 
    { 
     yield return MyRC; 
    } 
    else 
    { 
     foreach(var i in myList) 
      yield return i; 
    } 
} 
+0

嗯,收益率回报myRC没有更早的工作,现在它!深夜我猜! – Kumar 2012-03-14 16:35:33

2

关于什么:

IEnumerable<T> getItems(){ 
    if (someCondition.Which.Yields.One.Item) 
    { 
     yield return MyRC; 
    } 
    else 
    { 
     foreach(var i in myList) 
      yield return i; 
    } 
6

目前尚不清楚,你需要首先使用迭代器块。你是否需要/希望推迟执行?如果调用者多次迭代返回的序列,您是否需要/想要多次评估条件?如果没有,只需使用:

IEnumerable<T> GetItems() 
{ 
    if (someCondition.Which.Yields.One.Item) 
    { 
     return Enumerable.Repeat(MyRC, 1); 
    } 
    else 
    { 
     // You *could* just return myList, but 
     // that would allow callers to mess with it. 
     return myList.Select(x => x); 
    } 
} 
+0

myList是一个占位符,用于办公室com的func的占位符,它返回poco的所以必须使用yield return!对此有何想法? http://stackoverflow.com/questions/9696115/disposableaction-and-marshal-releasecomobject – Kumar 2012-03-14 16:26:37

+0

@Kumar:你为什么不直接建立这个列表呢?再次 - 你需要延期执行吗? – 2012-03-14 16:27:57

+0

不,不需要延迟的exec,但需要能够处理大量的邮件数据,每次只能处理一个附件,因此收益率高,而且肯定需要清理com引用 – Kumar 2012-03-14 16:40:21

相关问题