C# 8 中的范围和索引类型是什么?
What are Range and Index types in C# 8?
在 C# 8 中,System 命名空间中添加了两个新类型:System.Index
and System.Range
。
它们是如何工作的,我们什么时候可以使用它们?
它们用于索引和切片。
来自 Microsoft's blog:
索引:
Index i1 = 3; // number 3 from beginning
Index i2 = ^4; // number 4 from end
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine($"{a[i1]}, {a[i2]}"); // "3, 6"
范围(切片):
We’re also introducing a Range type, which consists of two Indexes,
one for the start and one for the end, and can be written with a x..y
range expression. You can then index with a Range in order to produce
a slice:
var slice = a[i1..i2]; // { 3, 4, 5 }
您可以在 Array
、String
、[ReadOnly]Span
和 [ReadOnly]Memory
类型中使用它们,因此您有另一种方法来制作子字符串:
string input = "This a test of Ranges!";
string output = input[^7..^1];
Console.WriteLine(output); //Output: Ranges
您也可以省略范围的第一个或最后一个索引:
output = input[^7..]; //Equivalent of input[^7..^0]
Console.WriteLine(output); //Output: Ranges!
output = input[..^1]; //Equivalent of input[0..^1]
Console.WriteLine(output); //Output: This a test of Ranges
您还可以将范围保存到变量并在以后使用它们:
Range r = 0..^1;
output = input[r];
Console.WriteLine(output);
System.Index
从结尾索引集合的好方法。
(可用于从头或尾获取集合)
System.Range
访问 "ranges" 或 "slices" 集合的范围方式。这将帮助您避免使用 LINQ 并使您的代码紧凑且更具可读性。 (访问集合中的子集合(切片))。
更多信息在我的文章中:
https://www.c-sharpcorner.com/article/c-sharp-8-features/
https://www.infoq.com/articles/cs8-ranges-and-recursive-patterns
在 C# 8 中,System 命名空间中添加了两个新类型:System.Index
and System.Range
。
它们是如何工作的,我们什么时候可以使用它们?
它们用于索引和切片。 来自 Microsoft's blog:
索引:
Index i1 = 3; // number 3 from beginning
Index i2 = ^4; // number 4 from end
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine($"{a[i1]}, {a[i2]}"); // "3, 6"
范围(切片):
We’re also introducing a Range type, which consists of two Indexes, one for the start and one for the end, and can be written with a x..y range expression. You can then index with a Range in order to produce a slice:
var slice = a[i1..i2]; // { 3, 4, 5 }
您可以在 Array
、String
、[ReadOnly]Span
和 [ReadOnly]Memory
类型中使用它们,因此您有另一种方法来制作子字符串:
string input = "This a test of Ranges!";
string output = input[^7..^1];
Console.WriteLine(output); //Output: Ranges
您也可以省略范围的第一个或最后一个索引:
output = input[^7..]; //Equivalent of input[^7..^0]
Console.WriteLine(output); //Output: Ranges!
output = input[..^1]; //Equivalent of input[0..^1]
Console.WriteLine(output); //Output: This a test of Ranges
您还可以将范围保存到变量并在以后使用它们:
Range r = 0..^1;
output = input[r];
Console.WriteLine(output);
System.Index 从结尾索引集合的好方法。 (可用于从头或尾获取集合)
System.Range 访问 "ranges" 或 "slices" 集合的范围方式。这将帮助您避免使用 LINQ 并使您的代码紧凑且更具可读性。 (访问集合中的子集合(切片))。
更多信息在我的文章中:
https://www.c-sharpcorner.com/article/c-sharp-8-features/
https://www.infoq.com/articles/cs8-ranges-and-recursive-patterns