当我在 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 Community 2019 中生成包含文件的图表