【问题标题】:why in c# we need to initialize primitive type variable? [duplicate]为什么在c#中我们需要初始化原始类型变量? [复制]
【发布时间】:2011-02-09 13:26:52
【问题描述】:

为什么在c#中我们需要初始化原始类型变量--

static void Main(string[] args)
{
   int a;
   Console.WriteLine(a);
}

引发编译时错误...

【问题讨论】:

  • 你还期待什么其他结果?
  • 这与原语无关。
  • @jsummers:他可能期待0

标签: c#


【解决方案1】:

为了防止潜在的编码错误,C# 将不允许你使用任何局部变量,直到编译器能够证明它已经被初始化。

【讨论】:

【解决方案2】:

纯粹是因为这是一种良好做法。无论如何,CLR 都会将它们初始化为默认值 - 对于 ValueTypes

【讨论】:

    【解决方案3】:

    因为推理功能.... c#在python Pearl中确实类型转换变量静态不同于动态 因此,通过检查变量初始化的值的类型 变量的类型被决定和验证。 它在编译时完成

    【讨论】:

      【解决方案4】:

      还有另一个概念上的原因。

      .NET 中的一切都是对象。

      变量是持有者,可以持有对对象的引用,也可以指向值。

      为什么 C# 应该能够让您输出到控制台(如您的示例中)一个不包含任何内容的变量?

      对我来说,问题是,你没有发现有用的 C# 编译器可以防止你创建无用的代码吗?在避免人为错误或错误逻辑方面,任何帮助总是有用的。

      也许我应该相信你这么说,因为……

      int a;
      
      if(false) { a = 1; }
      
      Console.WriteLine(a);
      

      ...也不会编译。

      那么,为什么 C# 编译器应该允许您使用无引用?任何论点都会很弱,因为什么好的程序应该写任何东西来控制台?如果你的程序不需要打印,就不要打印。

      例如,如果你想把它做对,它应该是:

      int a;
      
      if(false) { a = 1; } else { a = 0; }
      
      Console.WriteLine(a);
      

      “如果它是假的,我希望我的程序显示 1,如果它是真的,则显示 0”。但是“如果它是假的,则显示 1,或者显示'我不知道什么'”是一个弱论点。

      这就像说“你想要苹果还是空虚?”。

      【讨论】:

      • 整数是值类型,不是引用类型。它确实有一个默认值,它没有指向任何东西。
      • 但是对于 .net,不谈论低级的东西,任何东西都是对象。我试图用一种非常抽象的方式来解释。
      • 我明白你的意思,但这充满了错误的陈述。变量不是对 object 的引用。变量被定义为对存储位置的引用。一个存储位置保存一个;值可以是值类型的值,也可以是对引用类型实例的引用。 Null 是不是一个对象,null 是一个无效的引用;它是一个。最后,您的逻辑似是而非;为什么相同的逻辑不适用于字段或数组元素,它们都不需要显式初始化?
      • 嗯,你是绝对正确的。我想用“人类语言”来解释它,这样他就可以推测为什么 C# 会这样工作。
      • @Eric 我更改了“一些”文本,以反映您的 cmets。
      猜你喜欢
      • 1970-01-01
      • 2018-06-11
      • 2015-09-09
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多