【问题标题】:Is there a way to get the type of the objects stored in a generic list?有没有办法获取存储在通用列表中的对象的类型?
【发布时间】:2011-06-12 10:17:07
【问题描述】:

给定List<T> 类型的通用列表,我如何找到T 类型?

我想如果列表已填满,我可以选择 listInstance[0].GetType(),但这似乎有点骇人听闻。

编辑:

对于上下文,我想使用基于对象属性的列填充 DataTable。如果对象属性是通用列表,我想为列表存储的对象的每个属性添加一列。稍后我将扁平化数据结构以适应 DataRow。

我不想使用列表中第一个对象的类型的原因是因为不能保证每个实例都会填充列表。有些会,有些不会,但我仍然需要提前所有的列。

【问题讨论】:

  • 是的,至少在你的情况下是这样。如果您使用的是泛型集合,则不应将其类型转换为 Array eigther object 或 object[] ,反之亦然。继续使用打字版本。 T.

标签: c# .net generics reflection gettype


【解决方案1】:

照你说的做。这不是hackish。

您也可以直接在列表上调用 GetType() 并使用它来查看其 T 的类型。

【讨论】:

    【解决方案2】:

    为什么那是hackish?,根本不是hackish。这就是GetType() 方法退出的原因。获取对象的类型。

    【讨论】:

    • 我不同意。如果列表为空怎么办?
    • @Phil 他明确表示“假设列表已填充”
    • @Liviu,是的,我知道,因为我写了原帖。
    • @Klaus,这如何帮助我找到列表中第一个对象的类型?
    • @Klaus,我们似乎有不同的目的——我真的不明白你的意思。
    【解决方案3】:

    你可以试试

    typeof(List<T>).GetGenericArguments()[0]
    

    这适用于空数组,而您的版本不适用。

    更新:

    在实例上使用

    instance.GetType().GetGenericArguments()[0]
    

    【讨论】:

    • 不傻,但很简单;)。我很惊讶有多少人会在这个上冒 IndexOutOfRangeException 的风险。
    【解决方案4】:

    如果您期望某种类型并因此想要做某事,您也可以使用listInstance[0] is SomeTypeIExpectThisToBe

    【讨论】:

      【解决方案5】:

      你应该可以访问 type 参数,所以你可以使用 typeof:

      void ProcessList<T>( List<T> listInstance)
      {
          Type type = typeof(T);
      }
      

      【讨论】:

        【解决方案6】:

        这是骇人听闻的,因为如果没有填充列表,您将无法获得答案。

        您需要针对类型进行反思:

        List<int> mylist = new List<int>();
        Type listType = mylist.GetType();
        Type genericType = listType.GetGenericArguments()[0];
        

        【讨论】:

        • 您可以将代码块的每一行缩进 4 个空格(或突出显示它并单击工具栏按钮)。您不必在 SO 上使用 &lt;code&gt;/&lt;br&gt; 废话。 :-)
        【解决方案7】:

        你可以使用

         myList.GetType().GetGenericArguments()
        

        这将返回对象声明中指定的所有类型的数组。

        【讨论】:

          猜你喜欢
          • 2019-03-26
          • 2020-12-02
          • 2018-07-20
          • 2021-01-12
          • 1970-01-01
          • 2019-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多