Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不同类型的单排序c#列表?_C#_.net_List - Fatal编程技术网

不同类型的单排序c#列表?

不同类型的单排序c#列表?,c#,.net,list,C#,.net,List,是的,我对c#!:)不熟悉我正在使用.Net4 VS2010 我有三个类,每个类用于构建该类型对象的列表。所有三个继承都形成一个基类 我想将得到的三个列表合并成一个,并在其中一个基类元素上对它们进行排序 这可以用不同类型的列表来完成吗 简化示例: 创建每个列表 public List<TestOne> TestOne list; public List<TestTwo> TestTwoList; public List<object> BothLists;

是的,我对c#!:)不熟悉我正在使用.Net4 VS2010

我有三个类,每个类用于构建该类型对象的列表。所有三个继承都形成一个基类

我想将得到的三个列表合并成一个,并在其中一个基类元素上对它们进行排序

这可以用不同类型的列表来完成吗

简化示例:

创建每个列表

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
删除重复项(vs
AddRange
),我有一种感觉,这正是OP想要的,但我想为谷歌用户提一提。这是使用声明式风格的最佳示例。我不能说我喜欢列表的构建,然后排序,然后在其他答案中构建第二个列表。很好。打字错误:var sorted=listOne.Cast().Union(listwo.Cast()).OrderBy(item=>item.SeqNumber.ToList();谢谢你们所有人的回答这是我第一次尝试的答案,它很有效:)BaseClassText应该是BaseClassTest+1最完整的
Union
删除重复项(vs
AddRange
),我有一种感觉,这正是OP想要的,但我想为谷歌用户提一提。这是使用声明式风格的最佳示例。我不能说我喜欢列表的构建,然后排序,然后在其他答案中构建第二个列表。很好。打字错误:var sorted=listOne.Cast().Union(listwo.Cast()).OrderBy(item=>item.SeqNumber.ToList();谢谢你们所有人的回答这是我第一次尝试的答案,它是有效的:)BaseClassText应该是BaseClassTest