nint 型と nuint 型 (C# リファレンス)

C# 9.0 以降、nint キーワードと nuint キーワードを使用して、ネイティブサイズの整数 を定義できます。 これらは、32 ビット プロセスで実行される場合は 32 ビット整数、64 ビット プロセスで実行される場合は 64 ビット整数です。 これらは、相互運用シナリオ、低レベル ライブラリ、および整数演算が多用されるシナリオでパフォーマンスを最適化するために使用できます。

ネイティブサイズの整数型は、.NET 型 System.IntPtr および System.UIntPtr として内部で表現されます。 他の数値型と異なり、キーワードは単純に型の別名ではありません。 次のステートメントは同等ではありません。

nint a = 1;
System.IntPtr a = 1;

コンパイラでは、nintnuint に対して、整数型に適した演算と変換が提供されます。

実行時ネイティブ整数サイズ

実行時にネイティブサイズの整数のサイズを取得するには、sizeof() を使用できます。 ただし、コードを安全でないコンテキストでコンパイルする必要があります。 例:

Console.WriteLine($"size of nint = {sizeof(nint)}");
Console.WriteLine($"size of nuint = {sizeof(nuint)}");

// output when run in a 64-bit process
//size of nint = 8
//size of nuint = 8

// output when run in a 32-bit process
//size of nint = 4
//size of nuint = 4

また、静的な IntPtr.Size および UIntPtr.Size プロパティから同等の値を取得することもできます。

MinValue と MaxValue

実行時にネイティブサイズの整数の最小値と最大値を取得するには、次の例のように、nint キーワードと nuint キーワードで、MinValueMaxValue を静的プロパティとして使用します。

Console.WriteLine($"nint.MinValue = {nint.MinValue}");
Console.WriteLine($"nint.MaxValue = {nint.MaxValue}");
Console.WriteLine($"nuint.MinValue = {nuint.MinValue}");
Console.WriteLine($"nuint.MaxValue = {nuint.MaxValue}");

// output when run in a 64-bit process
//nint.MinValue = -9223372036854775808
//nint.MaxValue = 9223372036854775807
//nuint.MinValue = 0
//nuint.MaxValue = 18446744073709551615

// output when run in a 32-bit process
//nint.MinValue = -2147483648
//nint.MaxValue = 2147483647
//nuint.MinValue = 0
//nuint.MaxValue = 4294967295

定数

次の範囲の定数値を使用できます。

コンバージョン

コンパイラによって、他の数値型への暗黙的と明示的な変換が提供されます。 詳細については、「組み込みの数値変換」に関するページを参照してください。

リテラル

ネイティブサイズの整数リテラルには、直接の構文がありません。 long を示す L など、リテラルがネイティブサイズの整数であることを示すサフィックスはありません。 代わりに、他の整数値の暗黙的または明示的なキャストを使用できます。 例:

nint a = 42
nint a = (nint)42;

サポートされていない IntPtr または UIntPtr メンバー

IntPtr および UIntPtr の次のメンバーは、nint 型および nuint 型ではサポートされていません。

C# 言語仕様

詳細については、C# 言語仕様と、C# 9.0 機能提案メモの「ネイティブサイズの整数」セクションを参照してください。

関連項目