在c#中使用运算符[..]从HashSet获取数组

问题描述 投票:0回答:1

这些是范围运算符和索引器吗?我从来没有见过它们这样使用

[..h]
。 此代码中的第 6 行:

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} ");
    }
}

[..h]
中使用什么运算符? 您能推荐一个参考资料来研究这些运算符或使用的方法吗?

c# range operator-keyword hashset indexer
1个回答
0
投票

[..h]
是一个集合表达式,基本上是创建集合、数组和跨度的简洁语法。
[
]
里面的东西是集合的元素,例如

List<int> x = [1,2,3];
// basically:
// var x = new List<int> { 1,2,3 };

由于这是传递给需要

int[]
的参数,因此
[..h]
代表
int[]
。那么这个数组包含什么?什么是
..h
?在集合表达式中,
..
可以作为另一个集合的前缀,以“spread”该集合的元素。

由于

h
包含数字 1 到 9,所以这基本上是
[1,2,3,4,5,6,7,8,9]
,不过由于
HashSet
没有排序,因此元素的顺序可能不同。

通常,当您想要将其他元素/集合放入集合表达式中时,使用

..
,如文档中的示例所示:

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"];

所以

[..h]
是集合表达式的一种相当奇怪的用法。使用
h.ToArray()
来代替会更具可读性。

© www.soinside.com 2019 - 2024. All rights reserved.