如何按日期对IList C#进行排序?

如何按日期对IList C#进行排序?,c#,winforms,list,linq,sorting,C#,Winforms,List,Linq,Sorting,我有一个IList: IList[] info = new IList[2]; info[0] = Date; //List<DateTime> item info[1] = something; //List<double> item 但当我尝试这样做时: IEnumerable[] sortedEnum = info.OrderBy(info[0].Sort((a, b) => a.CompareTo(b))); 我得到: “System.Coll

我有一个IList:

IList[] info = new IList[2];
info[0] = Date;      //List<DateTime> item
info[1] = something; //List<double> item
但当我尝试这样做时:

IEnumerable[] sortedEnum = info.OrderBy(info[0].Sort((a, b) => a.CompareTo(b)));
我得到:

“System.Collections.IList”不包含“Sort”的定义,并且找不到接受“System.Collections.IList”类型的第一个参数的扩展方法“Sort”(是否缺少using指令或程序集引用?)


有人能帮我吗?

我想这是个X/Y问题。您试图解决一个复杂的“排序两个相互一致的列表”。而且。。。你可以做到,但这很难
Array.Sort
有一个合适的方法来对连接中的两个数组进行排序,但是:不是列表。你可以试着这样做,但坦率地说,我认为你解决了错误的问题。如果每个
DateTime
double
在逻辑上是连接的,那么与其有两个列表,不如有一个具有复合值的列表。例如:

var list = new List<(DateTime when, double value)>();
list.Add((dateX, valueX)); // your values...
list.Add((dateY, valueY));
list.Add((dateZ, valueZ));

list.Sort((x,y) => x.when.compareTo(y.when));
var list=newlist();
list.Add((dateX,valueX));//你的价值观。。。
列表。添加((日期,价值));
添加((dateZ,valueZ));
排序((x,y)=>x.when.compareTo(y.when));

这里我使用的是元组类型,但是通过声明自己的类型来保存复合值也可以做到同样的事情。您可能还想查看预排序的列表容器类型,但这对键值(uniquity等)提出了更高的要求。

我认为这是一个X/Y问题。您试图解决一个复杂的“排序两个相互一致的列表”。而且。。。你可以做到,但这很难
Array.Sort
有一个合适的方法来对连接中的两个数组进行排序,但是:不是列表。你可以试着这样做,但坦率地说,我认为你解决了错误的问题。如果每个
DateTime
double
在逻辑上是连接的,那么与其有两个列表,不如有一个具有复合值的列表。例如:

var list = new List<(DateTime when, double value)>();
list.Add((dateX, valueX)); // your values...
list.Add((dateY, valueY));
list.Add((dateZ, valueZ));

list.Sort((x,y) => x.when.compareTo(y.when));
var list=newlist();
list.Add((dateX,valueX));//你的价值观。。。
列表。添加((日期,价值));
添加((dateZ,valueZ));
排序((x,y)=>x.when.compareTo(y.when));
这里我使用的是元组类型,但是通过声明自己的类型来保存复合值也可以做到同样的事情。您可能还想查看预排序的列表容器类型,但这对键值(uniquity等)提出了更高的要求。

基于Marc的

List<(DateTime when, double value) list = info[0].Zip(info[1], (d,v)=> (d,v));
建立在马克的基础上

List<(DateTime when, double value) list = info[0].Zip(info[1], (d,v)=> (d,v));

为什么要使用过时的
IList
IEnumerable
?将它们更改为
IList
IEnumerable
以便。。。您有一个列表数组-是否尝试对数组进行排序?或者你真的在尝试对这两个列表进行排序,使它们保持同步?这根本没有意义。您将如何按列表中的一个项目对列表进行排序?此外,LINQ不适用于非泛型
IList
s。如果您有一个
IList
,那么它就是
info.OrderBy(x=>x.DateProperty)
为什么要使用过时的
IList
IEnumerable
?将它们更改为
IList
IEnumerable
以便。。。您有一个列表数组-是否尝试对数组进行排序?或者你真的在尝试对这两个列表进行排序,使它们保持同步?这根本没有意义。您将如何按列表中的一个项目对列表进行排序?此外,LINQ不适用于非泛型
IList
s。如果您有一个
IList
,那么它就是
info.OrderBy(x=>x.DateProperty)
只是为了澄清一下,ValueTuple是C#7中的一个新特性,它是.Net 4.7的本机特性。您可以使用的其他类有Tuple类、KeyValuePair、Dictionary或创建自己的类class@Magnetron
ValueTuple
为.NET 4.5或更高版本,以及.NETStandard 1.0或更高版本;只有当你下载了这个包,这就是为什么我说“本地”。在.NET4.7中包含了它,您不需要安装任何传统的DLL。谢谢!这正是我想要澄清的,ValueTuple是C#7中的一个新特性,是.NET4.7的原生特性。您可以使用的其他类有Tuple类、KeyValuePair、Dictionary或创建自己的类class@Magnetron
ValueTuple
为.NET 4.5或更高版本,以及.NETStandard 1.0或更高版本;只有当你下载了这个包,这就是为什么我说“本地”。在.NET4.7中包含了它,您不需要安装任何传统的DLL。谢谢!那正是我想要的