我应该使用Inline If语句还是在方法中处理测试

时间:2014-05-07 16:49:30

标签: c# if-statement inline

我有以下课程

public static class Translation
{
    public enum LanguageCultureName
    {
        enGB,
        zhCN
    };

   public static string Get(LanguageCultureName languageCultureName, string sValue)
   {
        if (languageCultureName == LanguageCultureName.enGB)
        {
            return sValue;
        }
        else
        {
            //get translated string
            return ....
        }
   }
}

基本上我想把这个方法称为

最好在方法调用周围添加一个内联If语句,如;

LanguageCultureName languageCultureName = LanguageCultureName.zhCN;
string sTranslation = languageCultureName == LanguageCultureName.enGB ? "My String to translate" : Translation.Get(languageCultureName, "My String to translate");

,或者只是调用它,如果它是enGB,则返回传递的字符串,如

LanguageCultureName languageCultureName = LanguageCultureName.zhCN;
string sTranslation = Translation.Get(languageCultureName, "My String to translate");

是否有任何表现原因,或个人偏好?

2 个答案:

答案 0 :(得分:2)

这是应该在Get方法内部进行的抽象,而不是内联。

LanguageCultureName languageCultureName = LanguageCultureName.zhCN;
string sTranslation = Translation.Get(languageCultureName, "My String");

我还应该注意,将enGB字符串硬编码不是一个好习惯。您应该将两者 enGB和zhCN字符串移动到外部资源文件(例如.resx)。

答案 1 :(得分:0)

我会选择第二个。性能影响非常小,但更具可读性。

我理解你的代码的方式是你要检查文化是否已经是英文,如果不是翻译,则返回标准字符串。为了使性能产生影响,您必须在帐户

中采取一些方面
  • 您对网络文化的期待频率是多少?
  • 翻译操作的密集程度如何?
  • 你可以传递一个非英语字符串作为输入吗?

这些评论中的每一个都会影响您的最终设计。你好像想要完全删除英文if并将其替换为三元语句,即:删除if并在错误的位置添加if

考虑到所有这些:如果你的验证是否是英语文化是你方法中的第一个陈述,那么它之间永远不会有明显的区别,并将它置于三元语句之外。

我们不要忘记十个指令中的一个:

  

我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源。