可以订购动态类型

本文关键字:动态 类型 | 更新日期: 2023-09-27 18:36:08

假设我有以下代码:

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>之后,你可以做你喜欢的序列而不是单个值。

并不是说我实际上已经尝试过上述方法,但我相信它应该有效。