C# 如何查找IEnumerable元素类型?
如果我尝试C# 如何查找IEnumerable元素类型?,c#,.net,C#,.net,如果我尝试 List<dynamic> list = new List<dynamic> { "blah" }; var type = list.GetType().GetGenericArguments()[0]; 我得到的是“object”而不是字符串。如何获取实际类型?首先尝试访问值,然后确定类型 对象是这里的真实类型。您可以将C中的dynamic视为具有特殊行为的对象,其中成员绑定发生在运行时而不是编译时。对于大多数类型,这就像是反射的快捷方式 百分之九十八的动
List<dynamic> list = new List<dynamic> { "blah" };
var type = list.GetType().GetGenericArguments()[0];
我得到的是“object”而不是字符串。如何获取实际类型?首先尝试访问值,然后确定类型
对象是这里的真实类型。您可以将C中的dynamic视为具有特殊行为的对象,其中成员绑定发生在运行时而不是编译时。对于大多数类型,这就像是反射的快捷方式 百分之九十八的动态不是正确的方法,导致的问题比它解决的问题还要多。我这么说是因为如果你能删除你正在做的事情中的动态部分,你会发现后续的代码解决方案会更令人满意,更少黑客攻击,更可预测如果你的列表包含不同的类型呢?e、 g.名单{blah,1}?正如那位将军已经说过的,为了得到动态的东西,你通常根本不需要动态。@这位将军我同意你的观点,但动态来自生成的代码,不受我的控制。@Himbrombeer说得很好,没有考虑过这个问题。@PeterDuniho重复的问题是不同的问题。事件,所以答案有有用的信息,不可能找到它问我的问题。我不想访问这些项目,但它似乎是唯一可能的解决方案,因为@HimBromBeere提到的动态背后的不同类型。
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
var types = list.Select(item => item.GetType());
// print out
foreach (var t in types) {
Console.WriteLine(t);
}