C# 对列表进行排序<;对象>;填充了没有LINQ的匿名类型 Random r=new Random(); List myList=新列表(); 对于(int i=0;iobj1.A.CompareTo(obj2.A));
上面的代码定义了一个通用的C# 对列表进行排序<;对象>;填充了没有LINQ的匿名类型 Random r=new Random(); List myList=新列表(); 对于(int i=0;iobj1.A.CompareTo(obj2.A));,c#,list,sorting,lambda,C#,List,Sorting,Lambda,上面的代码定义了一个通用的列表an,用100个匿名变量填充它,其中有两个成员,a和B 假设我想对A上的myList进行排序。最后一行尝试对列表进行排序,但是这段代码显然无法编译,因为编译器不知道对象列表包含什么 如果不使用LINQ,是否可以使用lambda或类似工具对该列表进行排序?首先,如果非常小心地使用隐式键入,可以使用LINQ: Random r = new Random(); List<object> myList = new List<object>(); f
列表
an,用100个匿名变量填充它,其中有两个成员,a和B
假设我想对A上的myList进行排序。最后一行尝试对列表进行排序,但是这段代码显然无法编译,因为编译器不知道对象列表包含什么
如果不使用LINQ,是否可以使用lambda或类似工具对该列表进行排序?首先,如果非常小心地使用隐式键入,可以使用LINQ:
Random r = new Random();
List<object> myList = new List<object>();
for (int i = 0; i < 100; i++)
myList.Add(new { A = r.Next(), B = r.Next() });
myList.Sort( (obj1, obj2) => obj1.A.CompareTo(obj2.A) );
其次,如果您愿意使用动态
,请将列表键入列表
,然后您可以直接使用LINQ
然而,我真的不明白你为什么坚持使用匿名类型。只需创建一个标称类型,就可以享受强大的类型、编译时安全性和LINQ的荣耀 只要您使用
var
语法将列表声明为匿名类型的对象列表,或者愿意使用dynamic
,就可以在没有LINQ的情况下对其进行排序:
var myList = Enumerable.Range(0, 100)
.Select(index => new { A = r.Next(), B = r.Next() })
.ToList();
myList.Sort( (obj1, obj2) => obj1.A.CompareTo(obj2.A) );
Random r=new Random();
List myList=新列表();
对于(int i=0;i<100;i++)
Add(新的{A=r.Next(),B=r.Next()});
myList.Sort((obj1,obj2)=>obj1.A.CompareTo(obj2.A));
LINQ中没有魔法-您可以查看所有方法签名,并了解如何计算类型
您需要这样的内容来创建类型列表(类似于ToList()
extension):
List新列表(T忽略)
{
返回新列表();
}
并将其用作
List<T> NewList<T>(T ignored)
{
return new List<T>();
}
Random r=new Random();
var myList=NewList(new{A=r.Next(),B=r.Next()});
对于(int i=0;i<100;i++)
Add(新的{A=r.Next(),B=r.Next()});
myList.Sort((obj1,obj2)=>obj1.A.CompareTo(obj2.A));
@Jason我重新阅读了答案,意识到第一部分可能会让人困惑,所以我提到了var
+1。要使用强类型版本,请参阅我的答案(据我所知,需要助手方法),这对我帮助很大。非常感谢你。
List<T> NewList<T>(T ignored)
{
return new List<T>();
}
Random r = new Random();
var myList = NewList(new { A = r.Next(), B = r.Next() });
for (int i = 0; i < 100; i++)
myList.Add(new { A = r.Next(), B = r.Next() });
myList.Sort( (obj1, obj2) => obj1.A.CompareTo(obj2.A) );