如何在枚举C#中使用switch语句

时间:2013-11-13 15:43:30

标签: c# enums switch-statement

我想使用switch语句以避免许多if。所以我这样做了:

        public enum Protocol
        {
             Http,
             Ftp
        }

        string strProtocolType = GetProtocolTypeFromDB();

        switch (strProtocolType)
        {
            case Protocol.Http:
                {
                    break;
                }
            case Protocol.Ftp:
                {
                    break;
                }
        }

但我有比较Enum和String的问题。因此,如果我添加了Protocol.Http.ToString(),则会出现另一个错误,因为它只允许进行CONSTANT评估。如果我把它改成这个

        switch (Enum.Parse(typeof(Protocol), strProtocolType))

也不可能。那么,在我的情况下可以使用switch语句吗?

3 个答案:

答案 0 :(得分:3)

您需要将Enum.Parse结果转换为Protocol才能使其正常工作。

switch ((Protocol)Enum.Parse(typeof(Protocol), strProtocolType))

答案 1 :(得分:2)

作为使用通用API的替代方案:

Protocol protocol;
if(Enum.TryParse(GetFromProtocolTypeFromDB(), out protocol)
{
    switch (protocol)
    {
        case Protocol.Http:
            {
                break;
            }
        case Protocol.Ftp:
            {
                break;
            }
        // perhaps a default
    }
} // perhaps an else

虽然坦率地说,使用==string.Equals进行测试(如果你想要不区分大小写等)可能更容易,而不是使用switch

答案 2 :(得分:1)

你试过这个:

    public enum Protocol
    {
         Http,
         Ftp
    }

    string strProtocolType = GetFromProtocolTypeFromDB();
    Protocol protocolType = (Protocol)Enum.Parse(typeof(Protocol), strProtocolType);

    switch (protocolType)
    {
        case Protocol.Http:
            {
                break;
            }
        case Protocol.Ftp:
            {
                break;
            }
    }