2010-08-21 62 views
2

我只是玩弄Windows Phone,並試圖爲它編寫一個應用程序。Silverlight聲明在發佈版本

我似乎無法在System.Diagnostics中找到Trace.Assert。這存在於PC的.NET中,並讓我在發佈版本中引發斷言。

我猜這只是一些不屬於silverlight工具包的東西。

在發佈版本中啓用聲明的正確方法是什麼? Debug.Assert不會在Release版本中做任何事情......我認爲它會被編譯出來。

+1

爲什麼要在發佈到Windows Phone中啓用斷言? – AnthonyWJones 2010-08-21 18:18:40

+0

@AnthonyWJones一個斷言表明一些令人難以置信的重大錯誤...我想應用程序崩潰... 我知道我可以做到這一點與自定義的異常,但我通常這樣做與asserts ... – obelix 2010-08-22 03:44:16

回答

0

Debug.Assert是一個調試輔助工具,它在後臺引發斷言,但僅在調試模式下引發。

意圖是你可以在你的代碼中自由地添加它們來檢查參數,期望值等,然後將它們全部刪除以提高發布版本的性能。

如果您使用它們作爲生成斷言的快捷方式,那麼很可能您並沒有將它們用於最初的目的。我強烈建議不要重複使用調試輔助工具作爲編碼快捷方式,而應查找/創建另一種更可接受的編碼模式,例如使用特定於應用程序的異常(或者如果您確實需要添加自己的快捷方式)。

作爲一名專業編碼人員,通常更多的是學習如何做事情,讓開發人員的生活更輕鬆,而不是節省幾行代碼。

+0

讓我舉例來說明我在問什麼: 考慮一個我用函數寫過的內部類 void foo(IBar bar); 由於這是一個內部類,我打算使用它,我期望傳遞一個非空的bar實例。所以我把一個斷言檢查欄不是null。 未來,如果我犯了一個錯誤,並通過一個空欄(這表明一個災難性的錯誤),我會得到一個斷言在調試模式。 在發佈模式下(斷言關閉),應用程序將崩潰,甚至可能不會在該功能。 那麼爲什麼不應該把這個斷言留在釋放模式呢? – obelix 2010-08-22 11:37:53

+1

當參數爲null時,在foo()中拋出[ArgumentNullException](http://msdn.microsoft.com/en-us/library/system.argumentnullexception%28VS.95%29.aspx)比依靠關於斷言。 – 2010-08-22 13:27:11