对没有LINQ的匿名类型的List 进行排序
Random r = new Random(); List myList = new List(); for (int i = 0; i obj1.A.CompareTo(obj2.A) );
上面的代码定义了一个通用List
,用100个匿名变量填充它,有两个成员A和B.
假设我想在A上对myList进行排序。最后一行尝试对列表进行排序,但是这段代码显然不能编译,因为编译器不知道对象列表包含什么。
不使用LINQ,是否可以使用lambda或类似方法对此列表进行排序?
只要您设法使用var
语法将列表声明为匿名类型对象列表,或者愿意使用dynamic
,就可以在没有LINQ的情况下对其进行排序:
Random r = new Random(); List myList = new List
首先,如果您非常小心地使用隐式类型,则可以使用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) );
其次,如果您愿意使用dynamic
,请将列表键入List
,然后您可以直接使用LINQ。
但是,我真的不明白为什么你坚持要粘在匿名类型上。 只需做一个名义上的类型,并享受强类型,编译时安全性和LINQ的荣耀!
LINQ中没有魔法 – 您可以查看所有方法签名并查看类型是如何计算出来的。
你想要这样的东西来创建你的类型列表(类似于ToList()
扩展名):
List NewList (T ignored) { return new List (); }
并用它作为
上述就是C#学习教程:对没有LINQ的匿名类型的List 进行排序分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
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) );
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/942412.html