【问题标题】:C# List<T> get return a sorted listC# List<T> 返回一个排序列表
【发布时间】:2010-08-30 23:17:48
【问题描述】:

我所拥有的基本上是:

public class Object{
    public bool IsObjectValid { set; get; }
}

public class MyThing{
    public List<Object> Objects { set; get; }
}

我想做什么:

public class ObjectsFiltered{
    public List<Object> ValidObjects{
        get{
            var list = LFs.Sort<_LF> where (IsObjectValid == true);
            return list;
        }
    }
}

我知道必须有一种方法来整理列表,过滤掉布尔真/假。我似乎无法完全理解 Linq。我似乎无法找到一个尖叫“啊哈!”的教程。关于我的 Linq Lambda:/

我宁愿只返回一个子集,只保留一个“对象”……而不是我当前设置的多组列表。亲吻。

最终,我将使用 bool-toggles 在我的 WPF 表单上提供 TreeViews。

澄清:我认为目标是有一个列表(列表对象)和几个显示过滤版本的对象的属性。而不是拥有 Objects,ObjecstValid,ObjectsInvalid,ObjectsSomeOtherRuleSet... 每个不同的 List...

我希望有一个列表来统治它们...并根据需要拥有返回列表变体的属性。

【问题讨论】:

  • 我认为你的问题不是很清楚。 “整理”和“过滤掉布尔真/假”是什么意思?
  • 如...我有原始的 List 对象。我想要一个输出 Objects.IsObjectValid == true 的属性。 IsValid bool 内部是确定对象是否正确设置的逻辑。如果属实,则显示在二级列表中。

标签: c# linq list c#-4.0


【解决方案1】:

您可以使用 LINQ:

public IEnumerable<Object> ValidObjects{ 
    get{ 
        return LFs.Where(item => item.IsObjectValid)
                  .OrderBy(item => item.SomeProperty); 
    } 
} 

除非您需要List&lt;T&gt;,否则最好返回IEnumerable&lt;T&gt;,这样您就不会将其全部存储在内存中。

lambda 表达式item =&gt; item.SomeProperty 是一个内联函数,它接受一个名为item 的参数并返回item.SomeProperty。 (参数和返回类型由编译器推断)

【讨论】:

  • 我想这就是我要找的。我在这里看到了其他问题的类似设置,只是很难将各个部分组合在一起。一旦我弄清楚为什么 XAML 现在对我大喊大叫,我会报告回来。
  • 请注意,Sort()OrderBy() 可能会由于底层使用的算法不同而产生不同的结果
【解决方案2】:

要过滤您的对象,您可以简单地返回:

return LFs.Where(x => x.IsObjectValid).ToList();

但是请注意,如果您打算经常使用该函数,则可以通过在内部维护一个预先过滤的列表来提高性能。

【讨论】:

    【解决方案3】:
     LFs.Where(x => x.IsObjectValid).ToList().Sort()
    

    使用默认比较进行排序。否则

     LFs.Where(x => x.IsObjectValid).OrderBy(x => x.PropertyToSortBy).ToList(); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多