我正在网上阅读(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
会更好,但在这种情况下它也不会起作用。那么如何避免这些东西?
答案 0 :(得分:5)
你误读了他的文章。在他的文章中,他特别谈到了关于类的变量的初始化。在你提出的情况下,你的变量应该在它们被使用之前进行初始化,因为它们会被立即使用。
编辑:是的,在这种特定情况下,int
变量不需要初始化,因为编译器会自动将int
初始化为0,但如果采用不同的程度string
或DateTime
,初始化在方法的上下文中变得很重要。
答案 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;
不好。此外,您应该在变量使用之前初始化(并声明)变量。
构造函数中的初始化不仅仅是在使用之前。