从 C# 9.0 起,可以使用 nint 和 nuint 关键字定义本机大小的整数。 在 32 位进程中运行时有 32 位的整数,在 64 位进程中运行时有 64 位的整数。 这些类型可用于互操作方案、低级别的库,可用于在广泛使用整数运算的方案中提高性能。
本机大小的整数类型在内部表示为 .NET 类型 System.IntPtr 和 System.UIntPtr。 关键字与其他数值类型不同,它们不只是类型的别名。 以下语句并不是等效的:
nint a = 1;
System.IntPtr a = 1;
运行时本机整数大小
若要在运行时获取本机大小的整数大小,可以使用 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
若要在运行时获取本机大小的整数的最小值和最大值,请将 MinValue 和 MaxValue 用作 nint 和 nuint 关键字的静态属性,如以下示例中所示:
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
常量
可以使用以下范围内的常量值:
对于 nint:Int32.MinValue 到 Int32.MaxValue。
对于 nuint:UInt32.MinValue 到 UInt32.MaxValue。
不支持的 IntPtr/UIntPtr 成员
nint 和 nuint 类型不支持 IntPtr 和 UIntPtr 的以下成员:
参数化的构造函数
Add(IntPtr, Int32)
CompareTo
Size - 改用 Size。 不支持 nint.Size,但你可以使用 IntPtr.Size 获取等效的值。
Subtract(IntPtr, Int32)
ToInt32
ToInt64
ToPointer
Zero - 改用 0。
Console.WriteLine($"{nameof(p1)} after {nameof(p2)} is modified: {p1}");
Console.WriteLine("The first number is {0} the second number.: ",p2);
Console.ReadKey();
其他
"D:\Temp\WebDownload\Fir.doc"等价于@“D:\Temp\WebDownload\Fir.doc”
Unicode转义字符