这些是范围运算符和索引器吗?我从来没有见过它们这样使用
[..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]
中使用什么运算符?
您能推荐一个参考资料来研究这些运算符或使用的方法吗?
[..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()
来代替会更具可读性。