首页 > 解决方案 > MyType 和 typeof(MyType) 有什么区别?

问题描述

enum类型MyEnum

public enum MyEnum
{
    foo,
    bar
}

我遍历它的值,这需要我获取类型MyEnum

foreach (MyEnum enumEntry in Enum.GetValues(typeof(MyEnum)))
{
   Console.WriteLine(enumEntry);// foo bar
}

问题是,typeof(MyEnum)据说返回对 的类型的引用MyEnum,但还不MyEnum是类型名称string,例如int等?为什么我不能这样做没有typeof这样的:

foreach (MyEnum enumEntry in Enum.GetValues(MyEnum))
{
   Console.WriteLine(enumEntry);
}

标签: c#types

解决方案


问题是, typeof(MyEnum) 应该返回对 MyEnum 类型的引用

T首先,您的假设不正确,因为 type 的引用和 Type 的实例类型之间存在差异T。根据微软文档:

typeof 运算符获取类型的 System.Type实例。typeof 运算符的参数必须是类型或类型参数的名称。

typeof一个运算符关键字,用于在编译时获取类型。或者换句话说,这个操作符是用来获取系统的。Type类型的对象。此运算符将 Type 本身作为参数并返回参数的标记类型。

为什么我不能像这样没有 typeofEnum.GetValues(MyEnum)

答案与 CLS 公共语言规范几乎没有关系,您的语法无效且不受支持(至少目前如此),目前以与您提到的内容类似的方式使用类型的唯一方法是使用如下的通用方法

Enum.GetValues<MyEnum>()

但当然,在这种情况下,该方法没有泛型重载Enum.GetValues


推荐阅读