Reputation: 11
Are these range operator and indexer? I have never seen them used like this [..h]
.
Line 6 in this code:
public static void Main(string[] args)
{
int[] a ={1,2,3,4,5,6,7,8,9};
HashSet<int> h=new(a);
/// do somethings on HashSet
WriteArray([..h]);
}
static void WriteArray(int[] a)
{
foreach(var n in a)
{
Console.Write($"{n} ");
}
}
What operator are used in [..h]
?
Can you recommend a reference to study these operators or the method used?
Upvotes: 0
Views: 466
Reputation: 273540
[..h]
is a collection expression, basically a concise syntax to create collections, arrays, and spans. The things inside the [
and ]
are the collection's elements, e.g.
List<int> x = [1,2,3];
// basically:
// var x = new List<int> { 1,2,3 };
Since this is passed to a parameter expecting int[]
, [..h]
represents an int[]
. What does this array contain then? What is ..h
? In a collection expression, ..
can be prefixed to another collection to "spread" that collection's elements.
Since h
contains the numbers 1 to 9, this is basically [1,2,3,4,5,6,7,8,9]
, though since a HashSet
is not ordered, the order of the elements may be different.
Usually ..
is used when there are other elements/collections you want to put in the collection expression, as the example from the documentation shows:
string[] vowels = ["a", "e", "i", "o", "u"];
string[] consonants = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
"n", "p", "q", "r", "s", "t", "v", "w", "x", "z"];
string[] alphabet = [.. vowels, .. consonants, "y"];
So [..h]
is rather a odd use of collection expressions. It would be more readable to use h.ToArray()
instead.
Upvotes: 3