C# 避免变量声明

本文关键字:声明 变量 | 更新日期: 2023-09-27 18:30:25

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

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

当然,这段代码等效于这样:

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

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

谢谢。

C# 避免变量声明

我会说第一个表单的可读性较差它包含一个冗余的初始值设定项。如果要给变量一个不同的值,为什么要将变量初始化为 "?至少将其更改为:

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的结果" - 此时,单行版本完全实现了该描述。

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

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

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

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

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

我认为最后一个版本既可读性强又易于调试。

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

您正在寻找 3 件事:

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

1.可读性是相对的。埃里克·利珀特/乔恩·斯基特发现的东西更具可读性,同样的事情不适用于我。你编码的次数越来越多,很多事情和你的观点都会改变,看代码。

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

2.性能:在第一个选择中,正如您可能意识到字符串不变性的那样,如果您重新初始化字符串,它不会清除先前的名称(实习),它将创建新字符串,变量将指向它。

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

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