2011-04-12 92 views
3

我有CodeDom生成的可选参数。例如:C#VS 2010在编辑时报告错误,但它编译并成功运行

class Square 
{ 
    public Square([Optional()] int side) { } 
} 

我有一个调用语句:

Square sq = new Square(); 

虽然我编辑,我的错误列表窗口显示: 广场'不包含一个构造函数参数0

但它编译并运行成功。如何摆脱'错误列表'窗口中的错误?谢谢!

+0

我唯一可以在VS2010中重新创建这个*特定*问题的方法是从正方形类中省略使用子句...这会导致JIT编译器/ intellisense忽略构造函数上的Optional()装饰器...添加使用子句和智能感知运行良好(即:没有错误信息)。 – Aidanapword 2011-04-12 16:15:11

+0

@Aidanapword确保您启用了实时语义错误。我在VS 2010中重申了这一点 – JaredPar 2011-04-12 16:17:49

回答

5

你所看到的是IDE实时语义错误检查和实际编译器运行之间的区别。实时语义检查使用C#编译器,但与其不具有100%的一致性,并且可能在该语言的角落案例中产生误报。

要摆脱这种禁用实时语义检查的

  • 工具 - >选项
  • 文本编辑器 - > C# - >高级
  • 选中 “显示实时语义错误”

解决此问题的另一种方法是使用实​​际的C#支持语法来选择值

public Square(int side = 0) { } 
+0

的确如此:而不是使用'interop'可选标记......但是它们可能在Dona的环境中是必需的(即:她的'Square'类IRL是从另一个平台调用的?) – Aidanapword 2011-04-12 16:16:40

+1

@Aidanapword不应该成为问题,因为编译器在使用受支持的可选语法 – JaredPar 2011-04-12 16:19:02

+0

感谢响应时,会自动将'System.Runtime.InteropServices'中的'Optional'添加到参数中。 CodeDom仅支持可选参数的Optional属性语法,而不支持正常的语法。 – dlsou 2011-04-12 16:30:12

相关问题