登记匿名通用列表<t>的每个元素

时间:2017-09-29 08:52:47

标签: c# .net reflection

我收到了一个 fi 对象..它是某个匿名对象的字段。

如果它属于Generic class List

,我想登记对象 fi 的每个元素
if(fi.FieldType.IsGenericType && fi.FieldType.GetGenericTypeDefinition() == typeof(List<>))
   {
      foreach (object element in (XXX) k.Value)
      {

      }
   }

对于那个特定的对象,我知道它是List,所以我可以施放(List)。

我的问题是:我应该投什么,不关心列表元素的类型是什么?

我尝试了List&lt;&gt ;, List ..它说我必须设置元素类型才能获得强制转换。

帮助..请。

数组只是为了让它可以运行

enter image description here

UPD:我认为只有当你处理了对象时才转换为接口(IList),在我的情况下它是一个对象的值..所以这意味着如果我与Generic达成协议,那么我应该继续使用Object,但没有使用它的值,对吗?

1 个答案:

答案 0 :(得分:0)

您需要获取特定实例的字段值,然后您可以迭代它。您可以按如下方式实现此目的:

if (fi.FieldType.IsGenericType && fi.FieldType.GetGenericTypeDefinition() == typeof(List<>))
{
    var value = (IList)fi.GetValue(myObject); // <- get field value, cast it to IList
    foreach (var element in value)
    {
        Console.WriteLine(element);
    }
}