nint和Pattern matching介绍(C)

nint和Pattern matching介绍(C)最近看到 nint 和 Patternmatch 处于好奇心的趋势 就去了解了一下这两个特性 希望能够对你是有帮助的 c nint

大家好,欢迎来到IT知识分享网。

nint
最近看C# 9.0时,发现一个有意思的关键词,就是nint,第一次看到这个,于是好奇心爆棚,就去实际操作了一下。

nint i = 1000; Console.WriteLine("i={0}", i); 

在这里插入图片描述

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]; } Span<byte> stack = stackalloc byte[sizeof(RTCPointQuery8) + 32]; ref var test = ref StackAllocAligned<RTCPointQuery8>(stack, 32); static unsafe ref T StackAllocAligned<T>(Span<byte> stack, nuint alignment) where T : unmanaged { 
    return ref Unsafe.AsRef<T>((void*)(((nint)Unsafe.AsPointer(ref MemoryMarshal.GetReference(stack)) + ((nint)alignment - 1)) & ~(nint)(alignment - 1))); } 

Pattern matching improvements(模式匹配)

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在转化成底层代码之后,也是if-else的模式;玩法有千万种,绝对让你瞠目结舌,就看你能不能玩出新的花样来。当然,这个特性最重要的是你要明白它的客户群体在哪里?

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136309.html

(0)
上一篇 2025-06-28 15:26
下一篇 2025-06-28 15:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信