枚举字符串表示的替代方案
之前的方案使用自定义属性来检索枚举的字符串表示形式。虽然功能有效,但可能显得冗长。以下是一种使用类型安全枚举模式的替代方法:
<code class="language-csharp">public sealed class AuthenticationMethod { private readonly string name; private readonly int value; public static readonly AuthenticationMethod FORMS = new AuthenticationMethod(1, "FORMS"); public static readonly AuthenticationMethod WINDOWSAUTHENTICATION = new AuthenticationMethod(2, "WINDOWS"); public static readonly AuthenticationMethod SINGLESIGNON = new AuthenticationMethod(3, "SSN"); private AuthenticationMethod(int value, string name) { this.name = name; this.value = value; } public override string ToString() { return name; } }</code>
这种模式定义了枚举的显式实例,包含字符串和数值表示。ToString()
方法返回字符串表示形式。
显式类型转换
为了启用显式类型转换,可以向类中添加一个用于映射的静态成员:
<code class="language-csharp">private static readonly Dictionary<string, AuthenticationMethod> instance = new Dictionary<string, AuthenticationMethod>();</code>
在类的构造函数中填充字典:
<code class="language-csharp">instance[name] = this;</code>
最后,添加一个用户定义的类型转换运算符:
<code class="language-csharp">public static explicit operator AuthenticationMethod(string str) { AuthenticationMethod result; if (instance.TryGetValue(str, out result)) return result; else throw new InvalidCastException(); }</code>
这允许您将字符串显式转换为 AuthenticationMethod
实例,使类型转换过程更直接。
以上是我们如何使用类型安全枚举和显式类型转换来改善枚举的字符串表示?的详细内容。更多信息请关注PHP中文网其他相关文章!