如何找到IEnumerable <dynamic>元素类型?

时间:2019-09-21 21:30:01

标签: c# .net

如果我尝试

List<dynamic> list = new List<dynamic> { "blah" };
var type = list.GetType().GetGenericArguments()[0];

我得到的是“对象”而不是string。如何获得“真实”类型?

2 个答案:

答案 0 :(得分:3)

尝试先访问该值,然后确定类型。

List<dynamic> list = new List<dynamic> { "blah", 15 };
var type = list[0].GetType();
Console.WriteLine(type); // prints out System.String

type = list[1].GetType();
Console.WriteLine(type); // prints out System.Int32

如果要获取所有类型的列表,请使用Linq:

var types = list.Select(item => item.GetType());

// print out
foreach (var t in types) {
    Console.WriteLine(t);
}

答案 1 :(得分:0)

Object是此处的真实类型。您可以将dynamic视为具有特殊行为的对象,其中成员绑定发生在运行时而不是编译时。对于大多数类型,这就像反射的快捷方式。