c# - 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);
}
解决方案
问题是, typeof(MyEnum) 应该返回对 MyEnum 类型的引用
T
首先,您的假设不正确,因为 type 的引用和 Type 的实例类型之间存在差异T
。根据微软文档:
typeof 运算符获取类型的 System.Type实例。typeof 运算符的参数必须是类型或类型参数的名称。
是typeof
一个运算符关键字,用于在编译时获取类型。或者换句话说,这个操作符是用来获取系统的。Type
类型的对象。此运算符将 Type 本身作为参数并返回参数的标记类型。
为什么我不能像这样没有 typeof
Enum.GetValues(MyEnum)
答案与 CLS (公共语言规范)几乎没有关系,您的语法无效且不受支持(至少目前如此),目前以与您提到的内容类似的方式使用类型的唯一方法是使用如下的通用方法
Enum.GetValues<MyEnum>()
但当然,在这种情况下,该方法没有泛型重载Enum.GetValues
。
推荐阅读
- jquery - 带有多选选项的 Select2 只允许我写 2 个字符
- c++ - 是否有必要为派生类创建复制构造函数?
- google-bigquery - 如何在大查询中使用 ST_CONTAINS 加入地理列
- pandas - 无法使用 pip 安装 pandas 升级 numpy、6 和 python-dateutil 时出现问题
- javascript - JavaScript:从一个表格主体淡入到另一个表格主体
- python-3.x - Python 从同一项目中的更高目录导入
- python - 如何在 matplotlib 中为多个图格式化 x 轴
- android-sdk-manager - 当我尝试执行任何命令时,Android SDK [控制台工具] 仅显示“使用”帮助信息
- c - 强制转换中 const 说明符的必要性
- php - 如何从 Laravel 项目中的 GraphQL 模式调用 Eloquent 动态范围(带 1 个参数)?