在循环中重新初始化变量的正确位置在哪里?

Dev*_*per 0 .net c#

哪种方法正确,为什么?

string initializeme = string.Empty;
StringBuilder AppendToMe = new StringBuilder();

for(int i=0; i < 10; i++)
{
    initializeme = string.Empty; //Is this the right place to initialize?

    if(expressionThatEvalsTrue)
      initializeme = SomeMethodReturningString();

    if(!string.IsNullOrEmpty(initializeme)
      AppendToMe.Append(initializeme);
}  
Run Code Online (Sandbox Code Playgroud)

要么

string initializeme = string.Empty;
StringBuilder AppendToMe = new StringBuilder();

for(int i=0; i < 10; i++)
{
    if(expressionThatEvalsTrue)
      initializeme = SomeMethodReturningString();

    if(!string.IsNullOrEmpty(initializeme)
       AppendToMe.Append(initializeme);

    initializeme = string.Empty; //Is this the right place to initialize?

}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

这里有三个因素:

  • 您是要使用lambda表达式还是匿名方法捕获循环中的变量?如果是这样,你想捕捉到一个变量,或每次迭代的单独一个?
  • 循环后你需要这个值吗?
  • 在循环的下一次迭代中是否需要当前值?

我通常在尽可能小的范围内声明变量,并尝试立即初始化它们:

for(int i=0; i < 10; i++)
{
    string initializeme = expression ? SomeMethodReturningString() : "";    
    Console.WriteLine(initializeme);    
}
Run Code Online (Sandbox Code Playgroud)