如何避免这些变量的初始化?

时间:2012-07-12 13:44:53

标签: c# .net variables initialization

我正在网上阅读(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.但是开始输出怎么样?我只是不能写int start,因为那总是Error Use of unassigned local variable。也许int start = null会更好,但在这种情况下它也不会起作用。那么如何避免这些东西?

4 个答案:

答案 0 :(得分:5)

你误读了他的文章。在他的文章中,他特别谈到了关于类的变量的初始化。在你提出的情况下,你的变量应该在它们被使用之前进行初始化,因为它们会被立即使用。

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

答案 1 :(得分:5)

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

答案 2 :(得分: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变量不需要初始化,无论是在内部范围还是外部范围内声明都是如此。

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

答案 3 :(得分:-2)

本文讨论的是不使用默认值初始化变量。例如,

int x = 0;

不好。此外,您应该在变量使用之前初始化(并声明)变量。

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