【问题标题】:How do I execute a foreach lambda expression on ObservableCollection<T>?如何在 ObservableCollection<T> 上执行 foreach lambda 表达式?
【发布时间】:2010-03-25 21:12:25
【问题描述】:

如何在 ObservableCollection 上执行 foreach lambda 表达式?

没有foreach 和 ObservableCollection 的方法,尽管这个方法存在于 List 中。

有没有可用的扩展方法?

【问题讨论】:

    标签: c# silverlight observablecollection


    【解决方案1】:

    BCL 中默认没有可用的方法,但可以直接编写具有相同行为的扩展方法(为简洁起见省略了参数检查)

    public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action) {
      foreach ( var cur in enumerable ) {
        action(cur);
      }
    }
    

    用例

    ObservableCollection<Student> col = ...;
    col.ForEach(x => Console.WriteLine(x.Name));
    

    【讨论】:

    • 感谢您的快速回复,效果很好。但我想知道一件事,谓词是如何作为一个动作工作的?谓词:x => Console.WriteLine(x.Name)
    • 之前我是这样使用的,statuses.ToList().ForEach(x => x.IsHidden = true);我认为这只是消耗内存。
    【解决方案2】:
    public static class EnumerableExtensions
    {
        public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
        {
            foreach (var e in enumerable)
            {
                action(e);
            }
        }
    }
    

    【讨论】:

      【解决方案3】:
      observableCollection.ToList().ForEach( item => /* do something */);
      

      【讨论】:

        猜你喜欢
        • 2016-06-12
        • 2012-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-04
        相关资源
        最近更新 更多