1

我在网上(http://www.codinghorror.com/blog/2005/07/for-best-results-dont-initialize-variables.html)读到我们不应该初始化变量。

不知怎的,我不明白。我常常无法避免这种情况。让我们看一个简单的例子:

public int test(string s)
{
  int start = 0;
  int mod = 2;
  int output = 0;

  foreach (int i in s)
  {
    output = output + (i % mod) + start;
    start++;
  }

  return output;
}

好吧,这可能是胡说八道:-)但问题是:我可以避免初始化吗?也许它对mod是不可能的,因为 mod 从一开始就必须是 2 并且它会保持 2。但是startoutput呢?我只是不能写int start,因为那总是Error Use of unassigned local variable。也许int start = null会更好,但在这种情况下它也行不通。那么如何避免这些东西呢?

4

4 回答 4

5

你误读了他的文章。在他的文章中,他专门讨论了与类有关的变量的初始化。在您提出的情况下,您的变量应该在它们可以使用之前被初始化,因为它们将立即被使用。

编辑:是的,在这种特定情况下,int变量不需要初始化,因为编译器会自动将 a 初始化int为 0,但是如果使用 astring或 a在不同程度上进行DateTime初始化,则初始化在方法的上下文中变得很重要。

于 2012-07-12T13:48:32.337 回答
5

你误读了这篇文章。本文讨论的是成员变量(自动初始化为默认值,因此不需要显式初始化),但您正试图将规则应用于局部变量(不会自动初始化,因此需要显式初始化)。

于 2012-07-12T13:49:59.903 回答
1

你可以像这样重写你的方法

public int Test(string s) {
            const int mod = 2;
int start;                
int output = 0;

            foreach(int i in s) {
                output = output + (i % mod) + start;
                start++;
            }

            return output;
        }

在这种情况下,不需要初始化 start 变量,无论是在内部还是外部范围内声明都是如此。

但是,输出变量确实需要初始化,因为它将由方法返回,并且如果循环永远不会运行,则变量可能永远不会被初始化。

于 2012-07-12T13:50:16.580 回答
-2

这篇文章谈论的是不要用默认值初始化变量。例如,

int x = 0;

不好。此外,您应该在变量使用干净代码之前对其进行初始化(并声明)。

构造函数中的初始化不仅仅是在使用之前。

于 2012-07-12T13:51:12.933 回答