抢购网站源码,建站平台入口,wordpress 显示,网站后台管理系统摘要怎么写翻译自 John Demetriou 2020年4月6日 的文章 《C# 8 Is Introducing Ranges》我们之前讨论过的 C# 中的一个特性 System.Index 结构体#xff0c;与另一特性 System.Range 结构体 是携手并进的。在 C# 8.0 之前#xff0c;没有访问集合中任意部分的范围或切片的语法。开发人员… 翻译自 John Demetriou 2020年4月6日 的文章 《C# 8 Is Introducing Ranges》我们之前讨论过的 C# 中的一个特性 System.Index 结构体与另一特性 System.Range 结构体 是携手并进的。在 C# 8.0 之前没有访问集合中任意部分的范围或切片的语法。开发人员通常不得不执行一些自定义的切片操作或者依靠诸如 array.Skip(5).Take(2); 的 LINQ 方法。现在 C# 添加了一个新的小特性它可以帮助人们从一个大的数组项目中获取一个小范围的项目。让我们来考虑一下。假设我们有一个项目数组我们仅需展示其中的一部分。通常情况下我们只需要循环这部分然后像下面这样输出它们。var array new string[]{Item0,Item1,Item2,Item3,Item4,Item5,Item6,Item7,Item8,Item9};for (int i 1; i 5; i)
{Console.WriteLine(array[i]);
}
因此当我们仅需要几个特定的项我们通过控制索引值来获取它们。通过使用范围(Range)我们可以用以下方式来替换var array new string[]{Item0,Item1,Item2,Item3,Item4,Item5,Item6,Item7,Item8,Item9};foreach (var item in array[1..5])
{Console.WriteLine(item);
}
在这里第一次使用的人会注意到一个奇怪的情况——它只会打印四项。为什么呢这是因为范围(Range)包含开始但不包含末尾。如果想要与上面的 for 循环有相同的结果我们的 foreach 循环应该是foreach (var item in array[1..6])
{Console.WriteLine(item);
}
Range 的一些示例1、从索引 1包含 到末尾包含foreach (var item in array[1..])
{Console.WriteLine(item);
}
2、从开始包含到索引 3不包含foreach (var item in array[..3])
{Console.WriteLine(item);
}
3、结合以上两种您可以得到一个语法上正确的以下版本foreach (var item in array[..])
{Console.WriteLine(item);
}
它的意思是获取整个范围。译者注它也等同于下面两种写法foreach (var item in array[0..^0])
{Console.WriteLine(item);
}
foreach (var item in array[0..array.Length])
{Console.WriteLine(item);
}
4、从索引 1包含到 从末尾开始的索引 1不包含foreach (var item in array[1..^1])
{Console.WriteLine(item);
}
在这里它结合了前面文章中介绍的 Index 的 Hat 运算符(^)。一个快速的解释Hat 运算符(^)会给您一个特定的索引。如果您写 ^1也就是在请求最后一项的索引。如上所述考虑到最后一个索引号是排除的在一个有 10 项的序列中请求索引项直到 ^1您也就是在请求索引项直到索引 9索引从 0 开始并且该项不包括在其中。我希望我讲清楚了。将范围作为变量我们前面所做的是将范围(Range)作为类型传递。我们也可以将范围声明为一个变量Range range 1..9;
然后可以在 [ 和 ] 字符中使用该范围var subarray array[range];
我们还可以将其作为方法的参数传递、将其存储为私有变量或者用在任何业务逻辑所需的地方。范围的类型支持范围(Range)不能被用在 List 或者 IEnumerableΤ但数组并不是唯一支持它的类型。您还可以将索引(Index)和范围(Range) 与 String、SpanT 或 ReadOnlySpanT 一起使用。与字符串一起使用的例子基本上就是代替 Substring 方法如下所示string s 01234567;
string r s[1..3]; // r 将会是 12
对于每个担心 List它可能是您通常用来替代数组的类型不支持范围的人来说List 从 .Net Framework 2.0 开始就已经有 GetRange 方法了。以下为译者补充索引和范围总结索引(Index)和范围(Range)为访问序列中的单个元素或范围提供了简洁的语法。对索引和范围的语言支持依赖于两个新类型和两个新运算符System.Index 类型表示一个序列索引。Hat 运算符(^)指定一个索引与序列末尾相关用于构造 System.Index 对象。System.Range 类型表示序列的子范围。范围运算符 ..用于指定范围的开始和末尾就像操作数一样用于构造 System.Range 对象。考虑数组 sequence 0 索引与 sequence[0] 相同。 ^0 索引与 sequence[sequence.Length] 相同。请注意sequence[..^0] 不会引发异常就像 sequence[..sequence.Length] 一样。对于任意数字 n索引 ^n 与 sequence.Length - n 相同。如下面代码中的注释所示string[] words new string[]
{// index from start index from endThe, // 0 ^9quick, // 1 ^8brown, // 2 ^7fox, // 3 ^6jumped, // 4 ^5over, // 5 ^4the, // 6 ^3lazy, // 7 ^2dog // 8 ^1
}; // 9 (or words.Length) ^0
一个范围指定了范围的“开始”和“末尾”。范围是左闭右开的也就是说范围包含“开始”不包含“末尾”。范围 [0..sequence.Length]、[0..^0]和 [..] 都表示整个范围。作者 John Demetriou译者 技术译民出品 技术译站https://ITTranslator.cn/END