【问题标题】:Why does a number declared as an implicit type default to integer in C#?为什么在 C# 中声明为隐式类型的数字默认为整数?
【发布时间】:2011-08-03 14:25:35
【问题描述】:

示例 1

var test = Byte.MaxValue;
Console.WriteLine(test + " : " + test.GetType().Name);

结果 255:字节

示例 2

var test = 255;
Console.WriteLine(test + " : " + test.GetType().Name);

结果 255:Int32

示例 3

var test = 10;
Console.WriteLine(test + " : " + test.GetType().Name);

结果 10:Int32

示例 4

var test = 255;
test = Int64.MaxValue;  
Console.WriteLine(test + " : " + test.GetType().Name);

结果:错误:无法将 long 类型隐式转换为 int

我的问题是为什么 C# 在使用 var 时默认类型为 Int32。

【问题讨论】:

  • 感谢您的回答,您能否在投反对票时添加评论,这有助于我改进。谢谢

标签: c# var implicit-typing


【解决方案1】:

仅当您使用 var 时,C# 不会默认为 Int32。当您声明整数文字而不提供类型提示时,C# 默认为 Int32(只要文字适合 Int32,否则它将转到 Int64)。由于文字类型为 Int32,因此 var 会自动选择该类型:

在 C# 中,文字值从编译器接收类型。你可以 通过附加一个字母来指定如何键入数字文字 号码的结尾。例如,指定值 4.56 应被视为浮点数,在数字后附加“f”或“F” - MSDN

【讨论】:

  • 除非文字太大而无法放入Int32
【解决方案2】:

默认为Int32 的不是var,而是您分配给它的整数文字。

您可以使用后缀 L 表示您正在编写 Int64 数字文字。

【讨论】:

    【解决方案3】:

    var 没有默认任何东西。相反,var 代替了初始化变量的表达式的实际类型。那么,问题是为什么 255 被认为是int?答案是没有类型提示(f、d、m、U、L 等)的整数文字被认为是 intuintlongulong 之一,具体取决于哪个是适合该数字的最小类型。

    一些例子:

    var i = 255; // var is int
    var ui = 4000000000; // var is uint
    var l = 5000000000; // var is long
    var ul = 9223372036854775808; // var is ulong
    

    【讨论】:

      【解决方案4】:

      为什么不呢?我相信Int32 是最常用的。其他数字类型具有要添加到文字值的后缀。 Int32 被选为没有后缀的那个。

      如果您希望var 为其他类型,请使用后缀,即

      var number = 123f;
      

      将是float。见here for more info about numeric literals

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        • 2020-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多