2011-04-12 94 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

相關問題