【问题标题】:Should I use a Inline If statment or handle the test in a method我应该使用 Inline If 语句还是在方法中处理测试
【发布时间】:2014-05-07 16:49:30
【问题描述】:

我有以下课程

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");

这有什么性能原因,还是个人喜好?

【问题讨论】:

  • 你为什么要做第一个版本?这不就是重复逻辑吗?
  • 好吧,如果我使用第一个版本,我会删除方法中的测试 if (languageCultureName == LanguageCultureName.enGB)
  • @Tommo1977,是的,您将删除“if”测试和方法调用,顺便说一下,它们没有相关的性能成本。通过这样做,您只需添加另一个(内联)if... Doh!
  • 如果您担心优化,请考虑方法调用确实会增加额外的复杂性(如果编译器没有优化它)。但是,除了可读性之外,没有其他真正的理由选择其中之一。
  • @NathanA, Micro-Optimization Theater 不是关于文本资源翻译的真正原因... ;)

标签: c# if-statement inline


【解决方案1】:

这是应该在 Get 方法中发生的抽象,而不是内联。

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

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

【讨论】:

    【解决方案2】:

    我会选择第二个。对性能的影响很小,但更具可读性。

    我理解您的代码的方式是您要检查文化是否已经是英语,如果是,则返回标准字符串而不是翻译它。为了使这对性能产生影响,您必须考虑几个方面

    • 您希望这种文化多久出现一次?
    • 翻译操作的强度如何?
    • 你能传递一个非英语字符串作为输入吗?

    这些评论中的每一条都会对您的最终设计产生影响。您似乎正在考虑完全删除英语 if 并用三元语句替换它,即:删除 if 并在错误的位置添加 if

    考虑到所有这些:如果您的验证是否是英语文化是您方法中的第一个语句,那么在三元语句中将其放在外部将永远不会有明显的区别。

    我们不要忘记十诫之一:

    我们应该忘记小的效率,比如大约 97% 的时间:过早优化是万恶之源。

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多