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上测试这个.但是我找不到一个按钮来执行此操作.根据这个答案,也就是在"快速行动"一生成构造按钮,但我没能找到一个.也许它不在社区版本中?
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.
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |