我对样式和性能方面的考虑都很感兴趣.我的选择是执行以下任一操作(抱歉格式不佳,但此网站的界面不是WYSIWYG):
string value = "ALPHA";
switch ( value.ToUpper() )
{
case "ALPHA":
// do somthing
break;
case "BETA":
// do something else
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
public enum GreekLetters
{
UNKNOWN= 0,
ALPHA= 1,
BETA = 2,
etc...
}
string value = "Alpha";
GreekLetters letter = (GreekLetters)Enum.Parse( typeof( GreekLetters ), value.ToUpper() );
switch( letter )
{
case GreekLetters.ALPHA:
// do something
break;
case GreekLetters.BETA:
// do something else
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我更喜欢下面的选项TWO,但除了基本的风格原因之外我没有任何其他真正的理由.但是,我甚至不确定是否存在风格原因.感谢您的输入.
第二个选项略快,因为第一个选项可能需要完整的字符串比较.但是,在大多数情况下,差异太小,无法衡量.
第二个选项的真正优势在于您明确表示有效值value属于窄范围.实际上,Enum.Parse如果字符串值不在预期范围内,它将抛出异常,这通常正是您想要的.
选项 #1 更快,因为如果您查看Enum.Parse的代码,您会发现它会逐项遍历每个项目,寻找匹配项。此外,需要维护和保持一致性的代码也更少。
需要注意的是,由于土耳其测试问题,您不应该使用ToUpper,而应该使用ToUpperInvariant()。
如果您坚持使用选项#2,至少使用允许您指定忽略大小写的重载。这比您自己转换为大写要快。此外,请注意,框架设计指南鼓励所有枚举值均采用 PascalCase,而不是 SCREAMING_CAPS。