在switch语句中用枚举替换字符串

时间:2014-05-14 15:07:21

标签: c# string visual-studio-2008 enums

我正在使用Visual Studio 2008并尝试转换此switch语句

        switch (salesOrderPayment.PaymentCardKey.ToUpper()) {
            case "MC":
                ValidateCreditCard(salesOrderPayment,errorMessages);
                break;
            case "VISA":
                ValidateCreditCard(salesOrderPayment, errorMessages);
                break;
            case "TELECHECK":
                //ValidateTelecheck(salesOrderPayment, errorMessages);
                ValidateAchCheck(salesOrderPayment, errorMessages);
                break;
            case "ACH":
                ValidateAchCheck(salesOrderPayment, errorMessages);
                break;

使用我创建的枚举

    public enum PaymentType {
        MC,
        VISA,
        AMEX,
        TELECHECK,
        CASH,
        ACH }

我试过这个:

switch (Enum.Parse(typeof(PaymentType),salesOrderPayment.PaymentCardKey.ToUpper())) 

但得到红色的波浪形线条,当我将鼠标悬停在它上面时说"预期的整数类型的值"。

2 个答案:

答案 0 :(得分:3)

试试这个:

switch ((PaymentType)Enum.Parse(typeof(PaymentType),salesOrderPayment.PaymentCardKey,true))) 

注意转换为PaymentType类型,同时请注意您的切换案例必须是枚举字段而不是字符串。

我使用Enum.Parse的另一个重载,以bool ignoreCase为参数,利用它,以便您不需要ToUpper来电。

答案 1 :(得分:2)

当Enum.Parse方法返回一个Object(参见here)时,您需要将Enum.Parse的结果转换为PaymentType