当我在 Visual Studio 中生成以二维数组作为参数的构造函数时,这些星号是啥?

Posted

技术标签:

【中文标题】当我在 Visual Studio 中生成以二维数组作为参数的构造函数时,这些星号是啥?【英文标题】:What are these asterisks when I generate a constructor with 2D arrays as parameters in Visual Studio?当我在 Visual Studio 中生成以二维数组作为参数的构造函数时,这些星号是什么? 【发布时间】:2018-08-04 11:52:52 【问题描述】:

在 Visual Studio for Mac 中,如果我这样写:

public class Foo 
    public int[,] Property1  get; 


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

这会发生:

public class Foo 
    public int[,] Property1  get; 
    public Foo(int[*, *] property1)
    
        Property1 = property1;
    

生成了构造函数,但是参数的类型是int[*, *],无法编译。

我在想这是 Visual Studio 提示我写一些东西来替换那些星号,或者可能不是?由于一维数组不会发生这种情况,而且我不知道 C# 中有任何语法允许您将 [] 中的内容放在这样的地方。

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

public Foo(int[*, *, *] property1)

    Property1 = property1;

是什么导致 Visual Studio 这样做?

我的 Visual Studio 版本是:Visual Studio for Mac Community 7.2.2(内部版本 11)。

我尝试在 Windows 版本的 Visual Studio - Visual Studio Community 2015 上对此进行测试。但我找不到执行此操作的按钮。根据this answer,在“快速操作”中有一个生成构造函数按钮,但我没找到。也许社区版没有?

【问题讨论】:

我不记得上次看到有人使用锯齿状数组是什么时候了 @bommelding 该死的,太久了,我什至不记得那个功能名称了 【参考方案1】:
    int[*, *] property1

这是由 Visual Studio 错误引起的。看起来很奇怪的语法与不合格数组的外观相匹配。当数组的下限为 0 时,数组是一致的,并且其语法受 C# 支持。C# 没有可用于不一致的数组类型的语法,因此会出现奇怪的 [*,*] 及其生成的编译错误。

这通常只发生在 C# 中,当您与能够创建此类数组类型的外部类型系统进行互操作时。我只知道 COM 作为一个实际示例,它能够发出 C# 程序可以直接使用的类型信息。注意this existing question中的语法匹配,另一个here。

当然,您的财产类型并不特殊。 VS 在集成在 IDE 中的 Roslyn 代码中失去了它的弹珠。从事此工作的团队在编写无错误测试代码方面没有良好的记录。我自己无法对此进行复制,我使用的是 15.5.6 版本,并且由于它生成了大量错误报告而避免更新到 15.6.x。它特定于 Mac 版的可能性很小,操作系统受到 COM 的挑战。 VS2015 还没有这个功能,所以你找不到它,ReSharper 是一个流行的商业替代品。

在 VS 中使用帮助 > 发送反馈 > 报告问题来告诉他们这个错误。我没有看到有关此缺陷的现有错误报告,至少在 developercommunity.visualstudio.com 搜索“生成构造函数”时没有匹配项。我预计不会有很多程序员遇到这个错误或花时间报告它。解决方法很简单,只需将代码编辑为int[,] property1即可。

【讨论】:

【参考方案2】:

我不确定为什么 VS for Mac 将这些星号放在那里,但我认为您想删除它们。也许这是VS中的一个错误。以下代码适用于我。

public class Foo

    public int[,] Property1  get; 
    public Foo(int[,] property1)
    
        Property1 = property1;
    


var myArray = new int[,]   1, 2 ,  3, 4  ;
var foo = new Foo(myArray);

【讨论】:

以上是关于当我在 Visual Studio 中生成以二维数组作为参数的构造函数时,这些星号是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2019 中生成视图时出错

如何在没有 Visual Studio 的情况下进行调试?

在 Visual Studio Community 2019 中生成包含文件的图表

在 Visual Studio 2010 数据库项目中生成种子数据

忽略Visual Studio中错误列表中特定文件的错误

在 Visual Studio 中生成 ERD 图