C# 9.0 の確認の目次はこちら
■ ネイティブ サイズの整数
ドキュメントはこちら
パフォーマンスと相互運用 という項目の二つ目のブロック (3行目の「ネイティブサイズの整数~」)です。
nin と nuint という型が追加されました。雑にいうと 32 ビット環境では 32 ビット整数型に 64 ビット環境では 64 ビット整数型になるとのことです。
整数型についてのドキュメントはこちら
32 ビットでは int と同じ、64 ビットでは long と同じサイズ。
■ 検証コード
次のようなコードを動かしてみました。
Console.WriteLine($"int : Type = {typeof(int).FullName, 14} : MinValue = {int.MinValue, 20} : MaxValue : {intMaxValue, 20}"); Console.WriteLine($"nint : Type = {typeof(nint).FullName,14} : MinValue = {nint.MinValue,20} : MaxValue : {nintMaxValue,20}"); Console.WriteLine($"long : Type = {typeof(long).FullName,14} : MinValue = {long.MinValue,20} : MaxValue : {longMaxValue,20}"); Console.WriteLine($"uint : Type = {typeof(uint).FullName,14} : MinValue = {uint.MinValue, 20} : MaxValue : {uintMaxValue, 20}"); Console.WriteLine($"nuint : Type = {typeof(nuint).FullName,14} : MinValue = {nuint.MinValue, 20} : MaxValue : {nuintMaxValue, 20}"); Console.WriteLine($"ulong : Type = {typeof(ulong).FullName,14} : MinValue = {ulong.MinValue,20} : MaxValue : {ulongMaxValue,20}");
■ 結果
64 ビット (x64)
int : Type = System.Int32 : MinValue = -2147483648 : MaxValue : 2147483647 nint : Type = System.IntPtr : MinValue = -9223372036854775808 : MaxValue : 9223372036854775807 long : Type = System.Int64 : MinValue = -9223372036854775808 : MaxValue : 9223372036854775807 uint : Type = System.UInt32 : MinValue = 0 : MaxValue : 4294967295 nuint : Type = System.UIntPtr : MinValue = 0 : MaxValue : 18446744073709551615 ulong : Type = System.UInt64 : MinValue = 0 : MaxValue : 18446744073709551615
32 ビット (x86)
int : Type = System.Int32 : MinValue = -2147483648 : MaxValue : 2147483647 nint : Type = System.IntPtr : MinValue = -2147483648 : MaxValue : 2147483647 long : Type = System.Int64 : MinValue = -9223372036854775808 : MaxValue : 9223372036854775807 uint : Type = System.UInt32 : MinValue = 0 : MaxValue : 4294967295 nuint : Type = System.UIntPtr : MinValue = 0 : MaxValue : 4294967295 ulong : Type = System.UInt64 : MinValue = 0 : MaxValue : 18446744073709551615```
実態としては System.IntPtr で、サイズはそれぞれ long、int と同じになりました。
■ まとめ
この機能は誰もが使う機能というわけではないかもしれません。
しかし、こういった機能が強化されるということはそういったことにも当たり前に C# が使われるようになっているという証拠だと思います。今はなくとも、いずれそういった機能を使う日が来るでしょう。備えましょう。