不同类型的单排序c#列表?
是的,我对c#!:)不熟悉我正在使用.Net4 VS2010 我有三个类,每个类用于构建该类型对象的列表。所有三个继承都形成一个基类 我想将得到的三个列表合并成一个,并在其中一个基类元素上对它们进行排序 这可以用不同类型的列表来完成吗 简化示例: 创建每个列表不同类型的单排序c#列表?,c#,.net,list,C#,.net,List,是的,我对c#!:)不熟悉我正在使用.Net4 VS2010 我有三个类,每个类用于构建该类型对象的列表。所有三个继承都形成一个基类 我想将得到的三个列表合并成一个,并在其中一个基类元素上对它们进行排序 这可以用不同类型的列表来完成吗 简化示例: 创建每个列表 public List<TestOne> TestOne list; public List<TestTwo> TestTwoList; public List<object> BothLists;
public List<TestOne> TestOne list;
public List<TestTwo> TestTwoList;
public List<object> BothLists;
“BothLists”应该是一个列表。
它应该允许您使用。OrderBy(x=>x.SequenceNumber)对基类属性进行排序。
编辑以添加:
根据评论,这将有助于合并以下列表:
BothLists = TestOneList.OfType<BaseClassList>().Concat().(TestTwoList.OfType<BaseClassList>()).ToList();
BothLists=TestOneList.OfType().Concat()(testtwolest.OfType()).ToList();
通常,.OfType()比.Cast()更可取,因为它只是基于类型进行筛选,而不是强制强制转换。“BothLists”应该是一个列表。
它应该允许您使用。OrderBy(x=>x.SequenceNumber)对基类属性进行排序。
编辑以添加:
根据评论,这将有助于合并以下列表:
BothLists = TestOneList.OfType<BaseClassList>().Concat().(TestTwoList.OfType<BaseClassList>()).ToList();
BothLists=TestOneList.OfType().Concat()(testtwolest.OfType()).ToList();
通常,.OfType()比.Cast()更可取,因为它只是基于类型进行过滤,而不是强制强制转换。给出您的示例,这非常简单:
public List<BaseClassTest> BothLists;
根据您的示例,这非常简单:
public List<BaseClassTest> BothLists;
如果一个类从基类继承,则它将作为大多数操作的基类。因此:
List<BaseClassTest> AllTests;
列出所有测试;
应该可以满足您的需要。如果一个类从基类继承,它将被视为大多数操作的基类。因此:
List<BaseClassTest> AllTests;
列出所有测试;
你应该能得到你所需要的。你应该能够做到:
List<BaseClassTest> sorted = TestOneList.Cast<BaseClassTest>()
.Union(TestTwoList.Cast<BaseClassTest>())
.OrderBy(item => item.SeqNumber)
.ToList();
List sorted=TestOneList.Cast()
.Union(TestTwoList.Cast())
.OrderBy(项目=>item.SeqNumber)
.ToList();
这将一次完成排序+合并。您应该能够执行以下操作:
List<BaseClassTest> sorted = TestOneList.Cast<BaseClassTest>()
.Union(TestTwoList.Cast<BaseClassTest>())
.OrderBy(item => item.SeqNumber)
.ToList();
List sorted=TestOneList.Cast()
.Union(TestTwoList.Cast())
.OrderBy(项目=>item.SeqNumber)
.ToList();
这将一次完成排序+并集。使TestOne和TestTwo实现IComparable接口。然后,您可以将列表组合成ArrayList并使用排序方法。使TestOne和TestTwo实现IComparable接口。然后,您可以将列表组合成一个ArrayList并使用排序方法。
List list3=new List();
List<BaseClassTest> list3 = new List<BaseClassTest>();
list3.AddRange(list1);
list3.AddRange(list2);
var sorted = list3.OrderBy(e => e.SequenceNum).ToList(); //if you really need a list back
列表3.AddRange(列表1);
列表3.AddRange(列表2);
var sorted=list3.OrderBy(e=>e.SequenceNum.ToList()//如果你真的需要一个列表回来
这都是假设您有Linq可用。当然,如果你这样做的话,工会声明可能也会起作用 List list3=新列表();
列表3.AddRange(列表1);
列表3.AddRange(列表2);
var sorted=list3.OrderBy(e=>e.SequenceNum.ToList()//如果你真的需要一个列表回来
这都是假设您有Linq可用。当然,如果你这样做的话,工会声明可能也会起作用 仅供参考,
BothLists
在本例中可以是BaseClassTest
类型。仅供参考,BothLists
在本例中可以是BaseClassTest
类型。根据列表的大小,他们可能希望进行适当排序。根据列表的大小,他们可能希望进行适当排序。+1最完整Union
删除重复项(vsAddRange
),我有一种感觉,这正是OP想要的,但我想为谷歌用户提一提。这是使用声明式风格的最佳示例。我不能说我喜欢列表的构建,然后排序,然后在其他答案中构建第二个列表。很好。打字错误:var sorted=listOne.Cast().Union(listwo.Cast()).OrderBy(item=>item.SeqNumber.ToList();谢谢你们所有人的回答这是我第一次尝试的答案,它很有效:)BaseClassText应该是BaseClassTest+1最完整的Union
删除重复项(vsAddRange
),我有一种感觉,这正是OP想要的,但我想为谷歌用户提一提。这是使用声明式风格的最佳示例。我不能说我喜欢列表的构建,然后排序,然后在其他答案中构建第二个列表。很好。打字错误:var sorted=listOne.Cast().Union(listwo.Cast()).OrderBy(item=>item.SeqNumber.ToList();谢谢你们所有人的回答这是我第一次尝试的答案,它是有效的:)BaseClassText应该是BaseClassTest