gpt4 book ai didi

c# - 对复合集合进行排序

转载 作者:太空狗 更新时间:2023-10-29 20:35:44 25 4
gpt4 key购买 nike

因此 WPF 不支持 CompositeCollections View 的标准排序或过滤行为,那么解决此问题的最佳做法是什么。

有两个或多个不同类型的对象集合。您希望将它们组合成一个可排序和可过滤的集合(而不必手动实现排序或过滤)。

我考虑过的一种方法是创建一个只有几个核心属性的新对象集合,包括我希望对集合进行排序的那些属性,以及每种类型的一个对象实例。

class MyCompositeObject
{
enum ObjectType;
DateTime CreatedDate;
string SomeAttribute;
myObjectType1 Obj1;
myObjectType2 Obj2;
{
class MyCompositeObjects : List<MyCompositeObject> { }

然后遍历我的两个对象集合以构建新的复合集合。显然,这是一种蛮力方法,但它会起作用。我将在我的新复合对象集合上获得所有默认 View 排序和过滤行为,并且我能够在其上放置一个数据模板以正确显示我的列表项,具体取决于该复合项中实际存储的类型。

对于以更优雅的方式执行此操作有什么建议?

最佳答案

我还不是很熟悉 WPF,但我认为这是一个关于排序和过滤的问题 List<T>收藏。

(withing having to manually implement sort or filter)

您会重新考虑实现自己的排序或过滤功能吗?根据我的经验,它很容易使用。下面的示例使用匿名委托(delegate),但您可以轻松定义自己的方法或类来实现复杂的排序或筛选。这样的类甚至可以具有动态配置和更改排序和过滤器的属性。

使用 List<T>.Sort(Comparison<T> comparison)使用您的自定义比较功能:

// Sort according to the value of SomeAttribute
List<MyCompositeObject> myList = ...;
myList.Sort(delegate(MyCompositeObject a, MyCompositeObject b)
{
// return -1 if a < b
// return 0 if a == b
// return 1 if a > b
return a.SomeAttribute.CompareTo(b.SomeAttribute);
};

从列表中获取项目子集合的类似方法。

使用 List<T>.FindAll(Predicate<T> match)使用您的自定义过滤器功能:

// Select all objects where myObjectType1 and myObjectType2 are not null
myList.FindAll(delegate(MyCompositeObject a)
{
// return true to include 'a' in the sub-collection
return (a.myObjectType1 != null) && (a.myObjectType2 != null);
}

关于c# - 对复合集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com