C# 如果要写入局部变量(在首次读取之前),是否需要初始化它们?

C# 如果要写入局部变量(在首次读取之前),是否需要初始化它们?,c#,C#,我看到了许多具有以下结构的代码: public void Blah() { int a = 0; string b = ""; DateTime c = DateTime.MinValue; bool d = false; // ...More initializations with dummy values // Overwrite the values in a, b, c, d, e.g. a = ReturnInt(); //

我看到了许多具有以下结构的代码:

public void Blah()
{
    int a = 0;
    string b = "";
    DateTime c = DateTime.MinValue;
    bool d = false;
    // ...More initializations with dummy values

    // Overwrite the values in a, b, c, d, e.g. a = ReturnInt();

    // Do calculations, reading the values from a, b, c, d, like DoCalculations(a);
}
总的来说,我更喜欢这样的东西:

public void Blah()
{
    int a = GetInt();
    string b = GetString();
    DateTime c = GetDateTime();
    bool d = GetBool();

    // Do calculations, reading the values from a, b, c, d, like DoCalculations(a);
}

这真的有必要吗?由于额外的初始化,会不会有任何性能影响?

只有当使用是
读取时,才应在使用前初始化变量。如果要在初始化后立即覆盖变量,最好使用显示的第二种样式,主要出于可读性的目的,我希望性能(来自样式#1)的影响(如果有的话)通常是最小的。

初始化变量是许多开发人员常用的标准

初始化变量是因为根据语言和环境的不同,读取未初始化的变量可能会产生未定义的行为。而且,由于变量可能自动初始化,也可能不自动初始化的确切条件很难记住,因此人们往往总是在使用对象之前初始化它们

通常认为在构造函数中执行此初始化是一种良好的做法

斯科特·迈尔斯(Scott Meyers)的畅销书《高效C++中也特别提到了这一点

  • 第4项:确保对象在使用前已初始化。

你可以做2,不problem@rikitikitik是的,我已经试过了,但我真的很好奇为什么人们会进行额外的变量初始化。这可能有点不相关,但是如果您的目的是以后“扔掉”该值,以便稍后通过
ReturnInt()
覆盖该值,然后绝对不要给它一个初始值,因为编译器不会允许您意外地读取它的初始丢弃值。我发现通常使用
out
方法(比如
Int32.TryParse
)或者如果它们是在较低的范围内写入的(在
if
或循环之外声明/使用,但在if/loop内分配),这只是自找麻烦。我同意……第二种样式更具可读性。然而,我在许多场合(从不同的项目中)看到人们正在使用第一种风格!我就是这么想的most@rexcfnghk它可能是一种强制性的代码样式,或者代码已从最初需要的样式#1更改,或者如果存在带分支的条件句,而这些分支是读而不写的..仔细看,我同意我没有回答提出的确切问题。我忘了说的是,由于我提到的标准,编写这种代码的人可能是习惯性的。至于哪一个更好,我会选择第二个,因为我想不出任何理由来承受初始化变量然后立即更改其值的运行时成本。