我想使用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语句吗?
答案 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;
}
}