我是一名iOS开发人员,我很遗憾在Objective-C中没有像C#中那样令人惊奇的方法来实现enum
所以我很想知道toString方法如何在C#中用于枚举.
也许有了你的答案,我将理解为什么Objective-C没有实现这个方法.
谢谢
C#编译器实际上将枚举转换为常规class类型,并通过结合语法糖和.NET框架中的方法(特别是Type和Enum类)的一些帮助使它们像枚举一样运行.
声明enum类型时实际发生的是编译器创建一个隐藏的,特别命名的类,其概念如下所示:
public sealed class EnumName : Enum
{
public static readonly int FirstValue = 0;
public static readonly int SecondValue = 1;
// etc.
}
Run Code Online (Sandbox Code Playgroud)
该Enum基类是不能直接使用特殊的基类.它提供了ToString()方法.这引发了.NET框架内部的一系列函数调用.代码Type.GetEnumName()最终成为一个私有Type.GetEnumData()方法,它使用反射来检查EnumName类,查看其字段(枚举值)并获取并返回它们的名称.
调用图(按时间顺序)如下所示:
Enum.ToString()
Enum.InternalFormat(RuntimeType, object)
Enum.GetName(RuntimeType, object)
Type.GetEnumName(object)
Type.GetEnumRawConstantValues()
Type.GetEnumData(out string[], out Array)
Type.GetEnumNames()
Type.GetEnumData(out string[], out Array)
Run Code Online (Sandbox Code Playgroud)
GetEnumData()调用Type.GetFields()并迭代它们,将每个字段的名称和整数值(枚举值)复制到输出数组中.