Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#VS 2010在编辑时报告错误,但它编译并运行成功_C#_Visual Studio_Visual Studio 2010_Optional Parameters - Fatal编程技术网

C#VS 2010在编辑时报告错误,但它编译并运行成功

C#VS 2010在编辑时报告错误,但它编译并运行成功,c#,visual-studio,visual-studio-2010,optional-parameters,C#,Visual Studio,Visual Studio 2010,Optional Parameters,我有由CodeDom生成的可选参数。例如: class Square { public Square([Optional()] int side) { } } 我有一份通话声明: Square sq = new Square(); 编辑时,“我的错误列表”窗口显示: “Square”不包含接受0个参数的构造函数” 但它编译并运行成功。如何消除“错误列表”窗口中的错误?谢谢 您看到的是IDE live语义错误检查与实际运行的编译器之间的差异。实时语义检查使用C#编译器,但与它没有100

我有由CodeDom生成的可选参数。例如:

class Square
{
    public Square([Optional()] int side) { }
}
我有一份通话声明:

Square sq = new Square();
编辑时,“我的错误列表”窗口显示: “Square”不包含接受0个参数的构造函数”


但它编译并运行成功。如何消除“错误列表”窗口中的错误?谢谢

您看到的是IDE live语义错误检查与实际运行的编译器之间的差异。实时语义检查使用C#编译器,但与它没有100%的奇偶校验,并且在语言的极端情况下可能产生误报

要摆脱此问题,请禁用实时语义检查

  • 工具->选项
  • 文本编辑器->C#->高级
  • 取消选中“显示实时语义错误”
另一种解决方法是对可选值使用实际的C#支持的语法

public Square(int side = 0) { }

我可以在VS2010中重新创建这个特定问题的唯一方法是从Square类中省略using子句。。。这会导致JIT编译器/intellisense忽略构造函数上的可选()修饰符。。。添加using子句,intellisense将正常运行(即:无错误消息)。@Aidanapword请确保已启用实时语义错误。事实上,我在VS 2010中重新编写了这个程序:而不是使用“互操作”可选标记。。。但是在Dona的上下文中可能需要它们(即:她的“Square”类IRL是否从另一个平台调用?@Aidanapword不应该成为问题,因为编译器在使用支持的可选语法时会自动向参数添加
Optional
from
System.Runtime.InteropServices
,感谢您的响应。CodeDom只支持可选参数的可选属性语法,而不支持正常语法。@完成是的,这是一个可悲的事实。CodeDom通常跟不上新的语言特性。我认为最好的办法是禁用实时语义错误