代码之家  ›  专栏  ›  技术社区  ›  TheEvilPenguin

在IOrderedEnumerable上枚举时设置属性<>不会在集合中的对象上设置属性

  •  1
  • TheEvilPenguin  · 技术社区  · 14 年前

    我正在VS2008/.net3.5sp1中编写和运行。

    void Main()
    {
        IOrderedEnumerable<MyClass> objects = Enumerable.Range(0, 10)
                .Select(n => new MyClass(n))
                .OrderBy(o => o.ObjectNumber);
    
        foreach (MyClass obj in objects)
        {
            obj.MyProperty = true;
        }
    
        var trueObjs = objects.Where(o => o.MyProperty);
    
        if (trueObjs.Count() == 0)
        {
            Debug.WriteLine("No object in 'objects' has MyProperty == true");
        }
        else
        {
            Debug.WriteLine("Found");
        }
    }
    
    public class MyClass
    {
        public MyClass(int objectNumber)
        {
            ObjectNumber = objectNumber;
            MyProperty = false;
        }
    
        public int ObjectNumber { get; private set; }
        public bool MyProperty { get; set; }
    }
    

    1 回复  |  直到 14 年前
        1
  •  2
  •   spender    14 年前

    foreach ,但再次与 trueObjs.Count() . 如果枚举调用 new MyClass(n)

    快速修复:将第一行更改为:

    var objects = Enumerable.Range(0, 10)
            .Select(n => new MyClass(n))
            .OrderBy(o => o.ObjectNumber)
            .ToList();