2

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

        public enum Protocol
        {
             Http,
             Ftp
        }

        string strProtocolType = GetProtocolTypeFromDB();

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

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

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

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

4

3 回答 3

3

您需要转换Enum.Parse结果以Protocol使其工作。

switch ((Protocol)Enum.Parse(typeof(Protocol), strProtocolType))
于 2013-11-13T15:46:08.287 回答
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

虽然坦率地说,使用==or string.Equals(如果你想要不区分大小写等)而不是使用switch.

于 2013-11-13T15:50:46.687 回答
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;
            }
    }
于 2013-11-13T15:46:10.473 回答