Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何查找IEnumerable元素类型?_C#_.net - Fatal编程技术网

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);
}