在 C# 的 switch 语句中使用具有字符和整数类型的枚举值

Using enum values with Chars and integer types in a switch statement in C#

所以,我想知道在枚举类型中同时使用整数和字符类型是可接受的做法还是错误的做法。例如,我目前正在使用支付处理供应商系统。他们可以调用我们的 soap 请求并发送 1 到 25 之间的任何付款类型的 ID,也可以发送 C、M 和 O 等字符。我想使用枚举来清楚地阅读代码,但我遇到了一个问题是我也想为此起诉一个开关。这是处理这个问题的不好的做法吗,我也可以在开关中安全地处理这个问题,还是我应该做一个 if else,然后尝试解析以处理不正确的转换?

枚举值示例如下:

internal enum PaymentTypeEnum
{
    /// <summary>
    /// Payment Type Id via Phone from ACI. Note: Int32
    /// </summary>
    PhonePayment_IVR = '9',
    /// <summary>
    /// Payment Type Id via electronic from ACI. Note: Int32
    /// </summary>
    eCollectPayment = '5',
    /// <summary>
    /// Payment Type Id for CANCEL payment. Note: Char
    /// </summary>
    CancelPayment = 'C',
}

使用 char 成员进行枚举似乎是可笑的做法,因为它们实际上是数字类型。

想看看您的示例是如何编译的吗?

//Your code...
internal enum PaymentTypeEnum
{
    PhonePayment_IVR = '9',
    eCollectPayment = '5',
    CancelPayment = 'C',
}

// Compiled...
internal enum PaymentTypeEnum
{
    PhonePayment_IVR = 57,
    eCollectPayment = 53,
    CancelPayment = 67
}

您似乎缺少抽象级别。您的枚举应该代表付款类型,然后如果您需要字符来代表每个枚举成员,请使用字典

Dictionary<PaymentTypeEnum, char> types = new Dictionary<PaymentTypeEnum, char>();

types[PaymentTypeEnum.PhonePayment_IVR] = '9';
types[PaymentTypeEnum.eCollectPayment] = '5';
types[PaymentTypeEnum.CancelPayment] = 'C';

public char GetPaymentType(PaymentTypeEnum pt)
{
    if(types.ContainsKey(pt))
    {
        return types[pt];
    }

    return default(char); // assuming (char)0 is meaningless in this context...otherwise...

    throw new InvalidArgumentException(...);
}

此外,不要将枚举作为后缀...您已经知道它是一个枚举!