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) );
上面的代码定义了一个通用List
的与两个部件A和B 100个匿名变量填充它
比方说,我要排序myList中的A.最后一行试图对列表进行排序,然而这显然代码不编译,因为编译器不知道哪些对象的列表包含。
如果不使用LINQ,是否有可能以某种方式进行排序使用Lambda或类似这个名单?
它可以在不LINQ对它进行排序,只要你设法声明您的列表作为使用匿名类型的对象名单的var
语法,还是愿意使用dynamic
:
Random r = new Random();
List<dynamic> 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:
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<dynamic>
,然后就可以直接使用LINQ。
不过,我真的不明白,你为什么坚持要紧盯匿名类型。 只是做一个标称类型和荣耀晒是强类型,编译时的安全性,以及LINQ!
有一个在LINQ没有魔法 - 你可以看看所有方法签名,看看类型是如何被计算出来。
你想是这样的,以创建您的类型(类似的列表ToList()
扩展名):
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) );