动作我已经实现了这个扩展方法。任何想法为什么这不起作用?谢谢C#的IEnumerable上<T>
4
A
回答
8
yield return
让你查询懒,换言之,只有当你开始遍历元素的方法执行。如果deferred fashion执行了许多LINQ操作符。接下来的代码演示了这个问题
new[] {1,2}.DoForEach(Console.WriteLine).ToList();
打印:
1
2
而
new[] {1,2}.DoForEach(Console.WriteLine);
打印什么
给予充分例如,检查下一个片段:
IEnumerable items = new[] {1,2}.DoForEach(s => Console.WriteLine("inside query:"+s));
foreach (var item in items)
{
Console.WriteLine ("inside loop:" + item);
}
这将打印
inside query:1
inside loop:1
inside query:2
inside loop:2
,它会开始打印只在第一foreach
迭代。当您构建查询时没有元素被打印
5
这是因为你正在返回一个迭代器,但没有执行它。考虑到你写了什么,你想要在列表上执行一个操作,而不是从它返回一个枚举器,所以看起来你需要让DoForEach()函数返回void,并且摆脱返回它。这应该将您的输出写入控制台。
编辑:这是显示我的意思是一个片段:
public static void DoForEach<T>(this IEnumerable<T> data, Action<T> action)
{
foreach (T value in data)
{
action(value);
}
}
相关问题
- 1. IEnumerable的<IEnumerable的<T>>到的IEnumerable <T>使用LINQ
- 2. 的EntitySet <IEnumerable的<T>>到IEnumerable的<T>
- 3. IEnumerable的<T>到的IDictionary <U,IEnumerable的<T>>
- 4. 分组IEnumerable <IEnumerable <int>>
- 5. 从IEnumerable <IEnumerable <T>>
- 6. 铸造IEnumerable <Derived> IEnumerable <BaseClass>
- 7. IEnumerable <IEnumerable <T>> to string [] []
- 8. 如何将IEnumerable <IEnumerable <IGrouping <int,string> >>转换为IEnumerable <IEnumerable <string>>
- 9. 转换一个通用的IEnumerable <T>到了IEnumerable <KeyValuePair>(C#)
- 10. 选择自IEnumerable <T>到IEnumerable的<Quantity<T>>
- 11. Mapper.Map <任务<IEnumerable的<Address>>,任务<IEnumerable的<AddressView>>()
- 12. IEnumerable上的计数<dynamic>
- 13. c#如何使用通用IEnumerable上的包含<T>
- 14. 如何将IEnumerable <IEnumerable <T>>转换为IEnumerable <T>
- 15. 如何将IEnumerable <IEnumerable <Foo>>减少到IEnumerable <Foo>?
- 16. C#,objectCollection.OfType <T>()和foreach(T item in objectCollection),IEnumerable to IEnumerable <T>
- 17. 返回列表<object>自IEnumerable C#
- 18. 在C++/CLI中实现IEnumerable <T>
- 19. C#关于IEnumerable <T> .Aggregate
- 20. IEnumerable <string>函数c#.net
- 21. 具体的IEnumerable <T>具体的IEnumerable <string>
- 22. 的Linq:转换IEnumerable的<Point>到IEnumerable <float>
- 23. IEnumerable <>到IList <>
- 24. 铸造了IEnumerable <int>到IEnumerable的<long>失败
- 25. 获得从IEnumerable <IEnumerable的<T>>
- 26. 更好的方式来使用IEnumerable <IEnumerable <string>>
- 27. IEnumerable <T>代表IEnumerable的“其余”<T>序列
- 28. 投自IEnumerable <object>到IEnumerable的<decimal>
- 29. 的IEnumerable的<foo>
- 30. SqlDataReader IEnumerable <T>
aaah明白了。谢谢 – 2013-05-05 20:18:22