C#のvar
による宣言では、サフィックスで型を明示しない場合、値の大きさに応じて型が暗黙的に選択されます。 例として、0x_7FFF_FFFF
以下の値はint
、0x_8000_0000
以上の値はuint
、0x_1_0000_0000
以上の値はlong
といったように、代入時にオーバーフローが起こらないような型が暗黙的に選択されます。
明示的に型を指定しない場合、値の大きさによって暗黙的に型指定される
using System;
static class Sample {
static void Main()
{
// サフィックスによって型を明示しない場合、値の大きさに応じて適切な型が選ばれる
var i = 0x7FFFFFFF; // int型・System.Int32
var ui = 0x80000000; // uint型・System.UInt32
var l = 0x7FFFFFFF_FFFFFFFF; // long型・System.Int64
var ul = 0x80000000_00000000; // ulong型・System.UInt64
Console.WriteLine($"{nameof(i)} ({i.GetType()}) : value = {i}");
Console.WriteLine($"{nameof(ui)} ({ui.GetType()}) : value = {ui}");
Console.WriteLine($"{nameof(l)} ({l.GetType()}) : value = {l}");
Console.WriteLine($"{nameof(ul)} ({ul.GetType()}) : value = {ul}");
}
}
実行結果
i (System.Int32) : value = 2147483647 ui (System.UInt32) : value = 2147483648 l (System.Int64) : value = 9223372036854775807 ul (System.UInt64) : value = 9223372036854775808