首页 >后端开发 >C++ >如何有效地表示C#枚举中的字符串?

如何有效地表示C#枚举中的字符串?

Linda Hamilton
Linda Hamilton原创
2025-01-29 07:45:12206浏览

How Can I Efficiently Represent Strings in C# Enums?

C# 枚举的字符串表示

在 C# 中,枚举通常使用数值来表示不同的选项。但是,在某些情况下,您可能更倾向于将有意义的字符串与这些选项关联起来。

一种方法是使用自定义属性和字符串检索方法:

<code class="language-csharp">[StringValue("FORMS")]
public enum AuthenticationMethod
{
    FORMS = 1,
    WINDOWSAUTHENTICATION = 2,
    SINGLESIGNON = 3
}

public static class StringEnum
{
    public static string GetStringValue(Enum value)
    {
        // 检索 StringValue 属性,如果找到则返回关联的字符串;否则返回 null。
    }
}</code>

此方法需要手动应用属性,并且被认为比较冗长。

另一种方法是考虑类型安全的枚举模式:

<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>

此模式涉及创建一个类似于枚举的密封类,其中静态只读字段表示每个选项。每个字段都具有字符串表示形式(name)和数值(value)。

对于显式类型转换,请考虑添加映射字典和用户定义的类型转换运算符:

<code class="language-csharp">private static readonly Dictionary<string, AuthenticationMethod> instance = new Dictionary<string, AuthenticationMethod>();

public AuthenticationMethod(int value, string name)
{
    instance[name] = this;
}

public static explicit operator AuthenticationMethod(string str)
{
    if (instance.TryGetValue(str, out AuthenticationMethod result))
        return result;
    else
        throw new InvalidCastException();
}</code>

这种方法结合了两种方法的优点:类型安全、方便的字符串表示和用户定义的类型转换。

以上是如何有效地表示C#枚举中的字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn