当我在Visual Studio中生成具有2D数组作为参数的构造函数时,这些星号是什么?

Swe*_*per 4 c# code-generation visual-studio visual-studio-mac

在Visual Studio for Mac中,如果我写了这样的东西:

public class Foo {
    public int[,] Property1 { get; }

}
Run Code Online (Sandbox Code Playgroud)

将光标放在那里的空行,然后按Command + I生成构造函数:

在此输入图像描述

这发生了:

public class Foo {
    public int[,] Property1 { get; }
    public Foo(int[*, *] property1)
    {
        Property1 = property1;
    }
}
Run Code Online (Sandbox Code Playgroud)

生成构造函数,但参数类型的类型是int[*, *],不编译.

在此输入图像描述

我在想这是Visual Studio提示我写一些东西来代替那些星号,或者不是吗?因为单维数组不会发生这种情况,而且我不知道C#中的任何语法允许你把东西[]放在像这样的地方.

对于三维数组,它会生成3个星号:

public Foo(int[*, *, *] property1)
{
    Property1 = property1;
}
Run Code Online (Sandbox Code Playgroud)

是什么导致Visual Studio执行此操作?

我的Visual Studio版本是:Visual Studio for Mac社区7.2.2(版本11).

我试图在Windows版本的Visual Studio - Visual Studio Community 2015上测试这个.但是我找不到一个按钮来执行此操作.根据这个答案,也就是在"快速行动"一生成构造按钮,但我没能找到一个.也许它不在社区版本中?

Han*_*ant 7

    int[*, *] property1
Run Code Online (Sandbox Code Playgroud)

这是由Visual Studio错误引起的.奇怪的语法匹配不符合数组的外观.一个数组是符合的,当它的下限为0时,它的语法由C#支持.对于不符合的数组类型,C#没有可用的语法,因此[*,*]它产生了怪异和编译错误.

当您与能够创建此类数组类型的外部类型系统互操作时,通常仅在C#中发生.我只知道COM作为一个实际的例子,能够发出可以由C#程序直接使用的类型信息.请注意此现有问题中的语法匹配,另一个在此处.

但当然,您的财产类型并不特别.VS正在失去其在IDE中集成的Roslyn代码中的大理石.在这方面工作的团队没有编写无错测试代码的良好记录.我自己不能得到一个repro,我在版本15.5.6并且由于它生成了大量的错误报告而避免更新到15.6.x. 它是Mac版本特有的小概率,操作系统受COM挑战.VS2015还没有这个功能,这就是为什么你找不到它,ReSharper是一个流行的商业替代品.

在VS内部使用帮助>发送反馈>报告问题以告诉他们有关该错误的信息.我没有看到针对此缺陷的现有错误报告,在searchcommunity.visualstudio.com上搜索"生成构造函数"时至少没有匹配.我不希望许多程序员遇到这个bug或花时间报告它.解决方法很简单,只需编辑代码即可int[,] property1.