C# 如何将空数组作为C中隐式数组的一部分#

C# 如何将空数组作为C中隐式数组的一部分#,c#,anonymous-types,C#,Anonymous Types,此声明导致错误,因为最后一项为空 var foo = new[] { new [] {1, 2, 3}, new [] {3, 4, 5}, new [] {} }; 我知道,一般来说,编译器需要所有这些数组都是相同的(匿名)类型,但它似乎应该允许“empty”作为特例,并像所有其他数组一样键入它 是否有某种方法来声明上述内容,以便我可以拥有一个空数组和非

此声明导致错误,因为最后一项为空

  var foo = new[] {
                 new [] {1, 2, 3},
                 new [] {3, 4, 5},
                 new [] {}
                 };
我知道,一般来说,编译器需要所有这些数组都是相同的(匿名)类型,但它似乎应该允许“empty”作为特例,并像所有其他数组一样键入它

是否有某种方法来声明上述内容,以便我可以拥有一个空数组和非空数组


Michael

当然,只需将其设置为
int[]

int[][] foo = new[] {
         new [] {1, 2, 3},
         new [] {3, 4, 5},
         new int[] {}
};

当然,只需将其设置为
int[]

int[][] foo = new[] {
         new [] {1, 2, 3},
         new [] {3, 4, 5},
         new int[] {}
};

如果您将其初始化为特定类型,则可以:

        var foo = new int[][] {
             new int[] {1, 2, 3},
             new int[] {3, 4, 5},
             new int[] {}
             };

如果您将其初始化为特定类型,则可以:

        var foo = new int[][] {
             new int[] {1, 2, 3},
             new int[] {3, 4, 5},
             new int[] {}
             };
是的缩写

new int[] { 1,2,3 }
编译器可以计算出它必须是
int
,因为数组包含int。
但是如果你说

new [] { }
由于数组为空,因此无法确定类型。因此,您必须明确地告诉编译器类型是什么:

var foo = new[] {
             new [] {1, 2, 3},
             new [] {3, 4, 5},
             new int [] {}
             };
是的缩写

new int[] { 1,2,3 }
编译器可以计算出它必须是
int
,因为数组包含int。
但是如果你说

new [] { }
由于数组为空,因此无法确定类型。因此,您必须明确地告诉编译器类型是什么:

var foo = new[] {
             new [] {1, 2, 3},
             new [] {3, 4, 5},
             new int [] {}
             };

无法隐式创建空数组。 正如@Dennis_E所说,“由于数组是空的,因此无法确定类型。”

你可以参考

引用相关部分:

空数组

...
var data8 = new [] { } and int[] data9 = new [] { } are not compilable.
...

顺便说一句,可能到-提供的细节更少-

隐式创建空数组是不可能的。 正如@Dennis_E所说,“由于数组是空的,因此无法确定类型。”

你可以参考

引用相关部分:

空数组

...
var data8 = new [] { } and int[] data9 = new [] { } are not compilable.
...

另外,如果不想显式地编写类型,可以使用linq过滤最后一个数组

var foo = new [] {
    new [] {1, 2, 3},
    new [] {3, 4, 5},
    new [] {0}.Where(e => false).ToArray()
};
如果您必须将此代码更改为:

var foo = new[] {
    new [] { new { N = 1 }, new { N = 2 }, new { N = 3} },
    new [] { new { N = 3 }, new { N = 4 }, new { N = 5} },
    new [] { new { N = 0 } }.Where(e => false).ToArray()
};

如果不想显式写入类型,可以使用linq过滤最后一个数组

var foo = new [] {
    new [] {1, 2, 3},
    new [] {3, 4, 5},
    new [] {0}.Where(e => false).ToArray()
};
如果您必须将此代码更改为:

var foo = new[] {
    new [] { new { N = 1 }, new { N = 2 }, new { N = 3} },
    new [] { new { N = 3 }, new { N = 4 }, new { N = 5} },
    new [] { new { N = 0 } }.Where(e => false).ToArray()
};

它无法确定元素的类型。(因为它没有元素)它无法确定元素的类型。(因为它没有元素)演员在哪里?演员在哪里?