c# - C#中的未初始化变量

原文 标签 c# .net variables initialization

我有以下代码:

class Foo
{

    public Foo()
    {
        Bar bar;
        if (null == bar)
        {

        }
    }
}

class Bar { }
代码专家将已经看到这给出了错误。 Bar可能不会在if语句之前初始化。
酒吧的值(value)是什么?它不应该为null吗?他们不是设置为null吗? (空指针?)

最佳答案

不,局部变量没有默认值1。阅读它们之前,必须对它们进行明确分配。这减少了您使用一个您认为已经赋予了合理值的变量的机会,而实际上却有了一些默认值。对于实例变量或静态变量,无法完成此操作,因为您不知道将以什么顺序调用方法。

有关确定分配的更多详细信息,请参见C#3.0规范的5.3节。

请注意,这与引用类型变量无关。这将无法以相同的方式进行编译:

int i;
if (i == 0) // Nope, i isn't definitely assigned
{
}

1就该语言而言,无论如何...显然,内存中的存储位置中包含某些内容,但这无关紧要且与实现方式有关。您可以通过一种方法创建一个带有out参数的方法,然后使用IL在方法中查看该参数的值,而无需给它另一个值,从而找出该值是什么。 CLR根本不在乎。然后,您可以调用该方法,并传入一个不确定分配的变量,然后瞧瞧您就可以检测到该值-该值很可能基本上是“全零”值。

我怀疑CLI规范确实会强制使用具有默认值的局部变量-但我必须进行检查。除非您执行上述类似的邪恶操作,否则在C#中对您来说都没有关系。

关于c# - C#中的未初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2515829/

相关文章:

c# - 在 project.json 中的 .NET Core 中的 .dll 和 .exe 之间进行选择

python - Selenium 将数据解析为变量

variables - 在拖动竞争中使用 Excel/OpenOffice 单元格名称

c# - 有没有办法检索 C# 应用程序的当前内存使用情况?

c# - 具有敏感数据的Sitecore WFFM

c# - 在asp.net MVC4应用程序中使用MVCMailer,使电子邮件发送时不断出错

c# - 将邮件消息转换为原始文本

c# - 无法在Windows 10移动版上部署

c# - 从C#.NET Winform应用程序在SQL Server中重复查询

variables - Terraform 将 2 个变量组合成一个新变量