假设我有以下代码:
dynamic myData = GetMyData();
foreach(dynamic d in myData.data)
{
Console.WriteLine(d.name);
}
我怎么能按字母顺序写出所有的名字?如果我使用类似List<MyClass>
我会使用的东西myData.OrderBy(t => t.name)
,但是当我使用动态类型时这似乎不起作用。
关于如何订购这些值的任何建议?
Enumerable.OrderBy(myData, (Func<dynamic, dynamic>)(t => t.name));
myData.OrderBy(t => t.name)
这应该与通常返回的结果相同。
由于OrderBy
是一种扩展方法,因此它不适用于动态类型。看到这个答案。
这可能对您有用:
IEnumerable<dynamic> sequence = Enumerable.Cast<dynamic>(myData);
foreach (var result in sequence.OrderBy(x => x.name))
{
Console.WriteLine(result.name);
}
基本上在调用Cast<dynamic>
和转换为IEnumerable<dynamic>
之后,您可以将您喜欢的作为一个序列而不是单个值。
并不是说我实际上已经尝试过上述方法,但我相信它应该可以工作。