我有一个变量(我称之为 prop),它的类型是“对象”,我知道底层类型总是某种 ICollection。我想迭代这个集合并对所有元素进行字符串化。
我的 prop 变量有一个 GetType() 方法,它返回类型。
foreach (var item in prop as ICollection<PCNWeb.Models.Port>)
{
//do more cool stuff here
}
问题是我不知道编译时 ICollection 的内部类型是什么(上面列为 PCNWeb.Models.Port)。
调用prop.GetType().ToString()
(在这种情况下)产生System.Collections.Generic.HashSet`1[PCNWeb.Models.Port]
我可以告诉那里我需要的信息,只是不知道如何使它工作。
我尝试了很多事情(尽管可能不正确):
尝试1:
Type t = prop.GetType();
foreach (var item in Convert.ChangeType(prop, t))
{
//do more cool stuff here
}
产生:
Compiler Error Message: CS1579: foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'
尝试2:
Type t = prop.GetType();
foreach (var item in prop as t)
{
//do more cool stuff here
}
产生:
Compiler Error Message: CS0246: The type or namespace name 't' could not be found (are you missing a using directive or an assembly reference?)
尝试 3:(根据@DarkFalcon 的建议)
Type t = prop.GetType();
foreach (var item in prop as ICollection)
{
//do more cool stuff here
}
产生:
Compiler Error Message: CS0305: Using the generic type 'System.Collections.Generic.ICollection<T>' requires 1 type arguments