【问题标题】:Why must typeof(T) be used to get the Type when T is itself a type?当 T 本身是一个类型时,为什么必须使用 typeof(T) 来获取类型?
【发布时间】:2012-04-16 07:27:43
【问题描述】:

例如

Type t = typeof(T);
t.GetProperty("Company")

【问题讨论】:

  • 欢迎使用 StackOverflow:如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行并单击“代码示例”按钮 ({ } ) 在编辑器工具栏上很好地格式化和语法突出显示它!
  • 你在说什么编程语言?
  • 并使用您正在使用的编程语言的标签。
  • 如果你有int 而不是T,那么听起来更清楚?想象一下使用 type name 而不是您的通用参数。类型定义是另一回事。
  • 嗨 Jaffrey ...我在询问 ASP.Net C# .. 例如在 IList 属性 = typeof(T).GetProperties().ToList(); T 本身就是一个 Class 意味着 A Type...那么为什么我们需要找到 typeOf a Type..请帮助

标签: c# typeof


【解决方案1】:

因为T 不是Type 对象,它只是一个类型参数。

在编译时,类型参数将被实际类型替换。例如,对于为string 类型生成的代码,typeof(T) 实际上将是typeof(string)。这里string 不是Type 对象,它只是一种数据类型。您需要 typeof 来获取该数据类型的 Type 对象。

【讨论】:

  • ok Guffa ......所以你的意思是 typeOf(T) 给了我们类型 T 的 Object ......我说的很好吗??
  • @UmeshK.: 不,typeof(T) 给你一个Type 对象,它描述了T 类型。例如,typeof(string) 返回的结果与 "".GetType() 相同。
  • 我说的是“类型 T 的对象”,而你说的是“类型对象,它描述了类型 T”..所以两者都是相同的东西..
  • @UmeshK.: 不,它们不一样。 T 类型的对象是T 类的实例,而Type 对象是System.Type 类的实例,其中包含有关T 类型的信息。 typeof(T) 返回类 Type 的实例,而 new T() 创建类 T 的实例。
  • 是的..例如整数半径 = 3;类型 t = radius.GetType();返回 INT32 感谢帮助!!
【解决方案2】:

因为类型和对象描述类型是有区别的。

T 是一种类型。 typeof 应用于一个类型,并返回一个 Type 类型的对象,它描述所讨论的类型。

【讨论】:

    【解决方案3】:

    另一种解释差异的尝试:

    有编译时类型,例如stringintMyClass。您在编写代码时声明了它们。

    有运行时类型。它们保存在Type 类型的对象中。这些是运行时内存中存在的普通对象实例。你通过 typeof(MyType) 得到这样一个对象。这些类型对象可用于在运行时检查类型。

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多