1

我只是尝试了一个小代码片段来查看值类型初始化是如何工作的。下面是代码片段

        public MainWindow()
        {
            InitializeComponent();

            int num;
            char alpha;
            //if (num == null)
            //{
            //    // this is null
            //}
            //else
            //{
            //    string value = num.ToString();
            //}

        }

有意对某些代码进行注释以正确构建项目。即将到来的汇编是

Use of unassigned local variable 'num'

我知道所有变量都应该在使用前分配。但是当我调试时发现num的值为0。如果默认初始化为0,那么为什么我们需要在使用它之前总是分配一些值。

它会是一种nullable我理解使用未分配变量的风险的类型,该变量将通过异常。

现在假设我想使用 num 的零值,它在没有任何赋值的情况下已经可用,为什么我必须初始化 num?

有人可以说这就是 .NET/C# 的工作方式。但这背后一定有一些强有力的理由。你能说出这个原因吗?

4

3 回答 3

0

如果你有一个字段,那么你可以让它保持未初始化,然后毫无问题地使用,因为字段将是一个内存变量,它会自动初始化为 0(在初始化期间)。同样不适用于局部变量,因为编译器可能决定将其值保存在寄存器中,这就是为什么您需要将其值隐式设置为默认值,否则在第一次使用时它将具有一些“随机”值(从上一个使用该寄存器),因为寄存器不会自动清除。

这种行为在 C 语言中很常见,我不明白为什么在 C# 中它应该有所不同。

于 2013-06-19T10:19:29.980 回答
0

Member variables will be initialized to the default value according to their type! Here is a list of them.

public MyClass()
{
   int number; //will be initialized to zero
}

However, local variables (in functions) will not be initialized to the default value by the compiler, therefore it is not allowed to use them!

public void myFunction()
{
   int number; //will NOT be initialized to zero
}

And here a reference to the same question on stackoverflow..

于 2013-06-19T10:11:51.060 回答
0

如果你需要使用整个 int 范围并且你想要一个额外的选项使用int?它是一个可以为空的类型,所有原始类型都带有 ? 它是一个可为空的类型,例如,如果您需要 true、false 并且两者bool?都可以使用。

于 2013-06-19T10:30:29.543 回答