12

假设我有一些这样的代码:

public string SomeMethod(int Parameter)
{
  string TheString = "";

  TheString = SomeOtherMethod(Parameter);

  return TheString;
}

当然,这段代码等价于:

public string SomeMethod(int Parameter)
{
  return SomeOtherMethod(Parameter);
}

我认为第一个版本更具可读性,这就是我编写代码的方式,即使我知道我可以避免使用变量时也是如此。我的问题是:编译器是否以相同的方式编译代码(即相同的性能)或者第二个选项在性能方面真的更好。

谢谢。

4

3 回答 3

20

我会说第一种形式可读性较差它包含一个冗余的初始化程序。如果要给它一个不同的值,为什么要将变量初始化为“”?至少将其更改为:

public string SomeMethod(int parameter)
{
  string returnValue = SomeOtherMethod(parameter);    
  return returnValue;
}

或者如果您真的想将声明与初始化分开:

public string SomeMethod(int parameter)
{
  string returnValue;
  returnValue = SomeOtherMethod(parameter);    
  return returnValue;
}

(请注意,我还调整了命名以遵循 .NET 命名约定并为局部变量提供更有意义的名称——“TheString”没有传达有用的含义。)

使用局部变量你真的不会看到任何性能问题,但我真的鼓励你考虑可读性。这里局部变量的目的是什么?您可能会将该方法描述为:“返回SomeOtherMethod使用给定参数调用的结果”-此时,单行版本完全实现了该描述。

于 2012-04-07T12:25:09.723 回答
13

编译器将为您的两个示例生成非常相似的代码。不过,一项细微的修改是避免初始化为您从不使用的空字符串。

public string SomeMethod(int Parameter)
{
    string result;
    result = SomeOtherMethod(Parameter);
    return result;
}

我不确定以这种方式重写代码是否使其更具可读性,但这确实意味着您可以添加断点并result在方法返回之前查看 的值。这在调试时很有用。

请注意,您可以将第一行和第二行结合起来,仍然可以获得以下好处:

public string SomeMethod(int Parameter)
{
    string result = SomeOtherMethod(Parameter);
    return result;
}

我认为最后一个版本具有高度可读性且易于调试。

于 2012-04-07T12:24:39.177 回答
4

答案已经发布,但让我尝试一下:

您正在寻找 3 件事:

可读性、性能、实用性(例如调试、日志记录等)

1.可读性是相对的。Eric Lippert / Jon Skeet 发现什么更具可读性,同样的事情不适用于我。您编写的代码越来越多,许多事情和您的观点将转向查看代码。

你给的两个选择都是可读的,对我来说第二个更具可读性。

2.性能:在第一个选择中,你可能知道字符串的不变性,如果你重新初始化一个字符串,它不会清除早期的名称(实习),它会创建新的字符串,变量会将它指向它。

因此,从性能角度来看,将变量初始化为新值(不必要地)将导致性能瓶颈。同样,这是相对的,取决于应用程序的大小/复杂性。为此,您需要选择第二个选项。您的第二个选项和乔恩的回答将导致相同的性能。

3.调试视角:如果你正在寻找这些东西,你会想要有局部变量。

于 2012-04-08T06:05:22.963 回答