装修设计网站哪个平台最好,常熟做网站优化,舟山网站建设有限公司,织梦网站环境搭建nint 最近看C# 9.0时#xff0c;发现一个有意思的关键词#xff0c;就是nint#xff0c;第一次看到这个#xff0c;于是好奇心爆棚#xff0c;就去实际操作了一下。
nint i 1000;
Console.WriteLine(i{0}, i);实际结果与int的结果是一样的#xff0c;那为什…nint 最近看C# 9.0时发现一个有意思的关键词就是nint第一次看到这个于是好奇心爆棚就去实际操作了一下。
nint i 1000;
Console.WriteLine(i{0}, i);实际结果与int的结果是一样的那为什么还要出一个nint关键字这个关键字的用途到底在哪里带着问题继续去探索。 对源代码进行了查看发现nint是IntPtr的结构体如果你做过C#与C之间的交互我相信你对IntPtr是非常的熟悉IntPtr是一个指针类型现在直接提供关键词nint进行支持让你能够在类型安全的前提下使用指针。
IntPtr i (IntPtr)1000;
Console.WriteLine(i{0}, i);这样我就可以对我之前做的关于在C#中进行内存对齐的代码用nint进行简化了代码如下所示
public unsafe struct RTCPointQuery8{public fixed float x[8];public fixed float y[8];public fixed float z[8];public fixed float time[8];public fixed float radius[8];}
Spanbyte stack stackalloc byte[sizeof(RTCPointQuery8) 32];
ref var test ref StackAllocAlignedRTCPointQuery8(stack, 32);static unsafe ref T StackAllocAlignedT(Spanbyte stack, nuint alignment) where T : unmanaged{return ref Unsafe.AsRefT((void*)(((nint)Unsafe.AsPointer(ref MemoryMarshal.GetReference(stack)) ((nint)alignment - 1)) ~(nint)(alignment - 1)));}Pattern matching improvements模式匹配
模式匹配是解决if-else嵌套的情形例如现在各个地方都在发放消费券消费券的规则如下 性别 年龄 地区 面值 男 20 江苏 1800 男 45 上海 3000 男 剩余 剩余 2000 女 20 浙江 1800 女 60 浙江 2500 如果使用传统的方式实现这个过程你首先想到的是if-else如下所示
public static decimal get_ticket(string sex, int age, string district){if(sex 男){if(age 20 district 江苏){return 1800;}else{if(age 45 district 上海){return 3000;}else{return 2000;}}}else{if(age 20 district 浙江){return 1800;}else if(age 60 district 浙江){return 2500;}}return 0;}这样写倒也是可以的就是看着不太舒服if-else太多了看得眼花缭乱接下来我们使用模式匹配看看代码会是什么样子如下所示
public static decimal get_ticket_pattern(string sex, int age, string distinct){return (sex, age, distinct) switch{(男, 20, 江苏) 1800,(男, 45, 上海) 3000,(男, _, _) 2000,(女, 20, 浙江) 1800,(女, 60, 浙江) 2500,_ 0};}这种简化后的代码看着让人舒服多了这就是Pattern matching要帮助你解决的场景。 两者运行的效果是一样的如下所示
但是Pattern matching在转化成底层代码之后也是if-else的模式玩法有千万种绝对让你瞠目结舌就看你能不能玩出新的花样来。当然这个特性最重要的是你要明白它的客户群体在哪里