当前位置: 首页 > news >正文

做网站用商标吗宜兴做网站的公司

做网站用商标吗,宜兴做网站的公司,佛山微网站建设天博,2023年8月份新冠一#xff1a;背景 1. 讲故事昨天在 github 上准备找找 C# 9 又有哪些新语法糖可以试用#xff0c;不觉在一个文档上看到一个很奇怪的写法: foreach (var item in myArray[0..5]) 哈哈#xff0c;熟悉又陌生#xff0c;玩过python的朋友对这个 [0..5] 太熟悉不过了#x… 一背景 1. 讲故事昨天在 github 上准备找找 C# 9 又有哪些新语法糖可以试用不觉在一个文档上看到一个很奇怪的写法:  foreach (var item in myArray[0..5]) 哈哈熟悉又陌生玩过python的朋友对这个 [0..5] 太熟悉不过了居然在 C# 中也遇到了开心哈看了下是 C# 8 的新语法讽刺讽刺8 都没玩熟就搞 9 了我的探索欲比较强总想看看这玩意底层是由什么支撑的。二.. 语法糖的用法 从前面介绍的 myArray[0..5] 语义上也能看出这是一个切分array的操作那到底有几种切分方式呢下面一个一个来介绍为了方便演示我先定义一个数组代码如下 var myarr  new string[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };1. 提取 arr 前3个元素如果用 linq 的话可以用 Take(3)用切片操作的话就是 [0..3] 代码如下static void Main(string[] args){var myarr  new string[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };//1. 获取数组 前3个元素var query1  myarr[0..3];var query2  myarr.Take(3).ToList();Console.WriteLine($query1{string.Join(,, query1)});Console.WriteLine($query2{string.Join(,, query2)});}2. 提取 arr 最后三个元素这个怎么提取呢在 python 中直接用 -3 表示就可以了在C# 中需要用 ^ 来表示从末尾开始代码如下static void Main(string[] args){var myarr  new string[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };//1. 获取数组 最后3个元素var query1  myarr[^3..];var query2  myarr.Skip(myarr.Length - 3).ToList();Console.WriteLine($query1{string.Join(,, query1)});Console.WriteLine($query2{string.Join(,, query2)});}3. 提取 array 中index 456 的三个位置元素用 linq 的话就需要使用 Skip Take 双组合如果用切片操作的话就太简单了。。。static void Main(string[] args){var myarr  new string[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };//1. 获取数组 中 index4,5,6 三个位置的元素var query1  myarr[4..7];var query2  myarr.Skip(4).Take(3).ToList();Console.WriteLine($query1{string.Join(,, query1)});Console.WriteLine($query2{string.Join(,, query2)});}从上面的切割区间 [4..7] 的输出结果来看这是一个 左闭右开 的区间所以要特别注意一下。4. 获取 array 中倒数第三和第二个元素从要求上来看就是获取元素 80 和 90如果你理解了前面的两个用法我相信这个你会很快的写出来代码如下static void Main(string[] args){var myarr  new string[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };//1. 获取 array 中倒数第三和第二个元素var query1  myarr[^3..^1];var query2  myarr.Skip(myarr.Length - 3).Take(2).ToList();Console.WriteLine($query1{string.Join(,, query1)});Console.WriteLine($query2{string.Join(,, query2)});}三. 探究原理 通过前面 4 个例子我想大家都知道怎么玩了接下来就是看看到底内部是用什么做支撑的这里使用 DnSpy 去挖挖看。1. 从 myarr[0..3] 看起用 dnspy 反编译代码如下    //编译前var query1  myarr[0..3];//编译后string[] query  RuntimeHelpers.GetSubArraystring(myarr, new Range(0, 3));从编译后的代码可以看出原来获取切片的 array 是调用 RuntimeHelpers.GetSubArray 得到了然后我简化一下这个方法代码如下public static T[] GetSubArray[Nullable(2)] T(T[] array, Range range){ValueTupleint, int offsetAndLength  range.GetOffsetAndLength(array.Length);int item  offsetAndLength.Item1;int item2  offsetAndLength.Item2;T[] array3  new T[item2];Buffer.MemmoveT(Unsafe.Asbyte, T(array3.GetRawSzArrayData()), Unsafe.AddT(Unsafe.Asbyte, T(array.GetRawSzArrayData()), item), (ulong)item2);return array3;}从上面代码可以看到最后的 子array 是由 Buffer.Memmove 完成的但是给 子array 的切割位置是由  GetOffsetAndLength 方法实现继续追一下代码public readonly struct Range : IEquatableRange{   public Index Start { get; }public Index End { get; }public Range(Index start, Index end){this.Start  start;this.End  end;}public ValueTupleint, int GetOffsetAndLength(int length){Index start  this.Start;int num;if (start.IsFromEnd){num  length - start.Value;}else{num  start.Value;}Index end  this.End;int num2;if (end.IsFromEnd){num2  length - end.Value;}else{num2  end.Value;}return new ValueTupleint, int(num, num2 - num);}}看完上面的代码你可能有两点疑惑1) start.IsFromEnd 和 end.IsFromEnd 是什么意思。其实看完上面代码逻辑你就明白了IsFromEnd 表示起始点是从左开始还是从右边开始就这么简单。2) 我并没有看到 start.IsFromEnd 和 end.IsFromEnd 是怎么赋上值的。在 Index 类的构造函数中取决于上一层怎么去 new Index 的时候塞入的 true 或者 false如下代码这个例子的流程大概是new Range(1,3) - operator Index(int value) - FromStart(value) - new Index(value) 可以看到最后在 new 的时候并没有对可选参数赋值。2. 探究 myarr[^3..]刚才的例子是没有对可选参数赋值那看看本例是不是 new Index 的时候赋值了? //编译前 var query1  myarr[^3..];//编译后 string[] query  RuntimeHelpers.GetSubArraystring(myarr, Range.StartAt(new Index(3, true)));看到没有这一次 new Index 的时候给了 IsFromEnd true , 表示从末尾开始计算大家再结合刚才的  GetOffsetAndLength 方法我想这逻辑你应该理顺了吧。四总结 总的来说这个切片操作太实用了作用于 arr 可以大幅度减少对 skip take 的使用作用于 string 也可以大幅减少 SubString 的使用如12345[1..3] -  12345.Substring(1, 2)嘿嘿厉害了吧还是C# 大法????????
http://www.zqtcl.cn/news/396057/

相关文章:

  • 个人网站工商备案济南建网站app
  • 佛山网站建设公司哪家性价比高2018建设网站
  • 公司建一个网站建设工程教育网网址
  • 一级a做爰片免播放器网站推广渠道包括哪些
  • 南京市建设工程档案馆网站新乡市四合一网站建设
  • 网站建设制作周期咸宁网站设计制作
  • 网站推广营销联系方式南宁做网站推广的公司
  • 深圳网站建设公司元红河网站建设代理
  • 商丘河南网站建设Wordpress加720云vr
  • 上海网站建设公司网站建设网络推广费用高吗
  • 南宁学做网站百度电脑版
  • 公司网站建设工作通知怎样看一个网站做的网络广告
  • 普洱市住房和城乡建设局网站最有创意的广告设计
  • 网站开发者常见问题网站建设鸿儒
  • 米方科技网站建设个人可以做外贸网站吗
  • 如何做别人网站镜像自建wordpress主题
  • 临沂网站制作平台网站开发的软硬件环境
  • 假冒中国建设银行的网站网站开发 避免 字段变化 代码
  • 如何取消网站备案搜索seo怎么优化
  • 网站备案系统验证码出错网站的电子画册怎么做
  • 厦门企业网站建设方案企业网站硬件设计
  • 做网站推广的方法有哪些高级服装定制网站
  • 网站的百度地图怎么做的广告设计与制作发展趋势
  • 东莞网站建设兼职平面磨床东莞网站建设
  • 北京购物网站建设佛山外贸网站建设咨询
  • 网站图片在手机上做多大最清晰wordpress 表情拉长
  • 深圳住房宝安和建设局网站做网站的软件是是什么
  • 义乌网站建设方式抖音珠宝代运营
  • 郑州 手机网站制作广州网站优化地址
  • 国外效果图网站2022百度seo优化工具