gpt4 book ai didi

c# - 为什么不能为数组的参数和元素省略new int []和new []?

转载 作者:太空宇宙 更新时间:2023-11-03 18:08:13 26 4
gpt4 key购买 nike

static void Main(string[] args)
{
int[][] data =// new int[][] has been omitted here!
{
new int[] {1,2,3},// new int[] cannot be omitted
new int[] {1,2,3,4}// new int[] cannot be omitted
};

Foo(new[] { 1, 2, 3 });// new[] cannot be omitted
}

static void Foo(int[] data) {/* implementation omitted */}


为什么不能为数组的参数和元素省略 new int[]new[]

最佳答案

数组初始化器语法({ ... })仅可用于初始化字段或变量。

jagged array的元素没有默认的初始化。因为它的元素也是数组。这就是为什么在声明它们时必须使用new []的原因。

这就是为什么你不能那样做。

int[][] data =
{
{1,2,3},
{1,2,3,4}
};


但是您可以在多维数组的单个元素中执行此操作,因为它们的元素是可变的。

int[,] data =
{
{1,2,3},
{1,2,3}
};


要么

int[] data =
{
1,
2,
3
};


来自 12.6 Array initializers


  使用数组初始化程序的上下文确定类型
  被初始化的数组。在数组创建表达式中,
  数组类型紧接初始化程序之前。在田间或
  变量声明,数组类型是字段的类型或
  变量被声明。


对于参数部分,任何类型的数组都没有 new用法。阅读 10.5.1 Method parameters

大多数情况下使用 params。例如;

static void Foo(params int[] data) {/* implementation omitted */}

static void Main(string[] args)
{
int[] array = {1, 2, 3};
Foo(array);
Foo(1, 2, 3, 4);
}


实际上, Foo(1, 2, 3, 4);自动使用给定值创建一个四元素 int[]。等于调用 Foo(new int[] {1,2,3,4})

关于c# - 为什么不能为数组的参数和元素省略new int []和new []?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22113762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com