views:

27

answers:

1

I'm just playing around with Windows Phone and trying to write an app for it.

I can't seem to find a Trace.Assert in System.Diagnostics. This exists in .NET for the PC and lets me throw assertions in Release builds.

I'm guessing that this is just something that's not a part of the silverlight toolkit.

What is the correct way of enabling assertions in a release build? Debug.Assert does not do anything in the Release build ... I think it gets compiled out.

A: 

Debug.Assert is a debug aid that throws asserts behind the scenes, but only in debug mode.

The intention being that you can add them liberally throughout your code to check parameters, expected values etc then have them all removed to improve performance in the release builds.

If you are using them as shortcuts to generate asserts then it is likely you are not using them for their original purpose as well. I would strongly recommend not re-using a debug aid as a coding shortcut but instead find/create another more acceptable coding pattern like using app-specific exceptions (or adding your own shortcuts if you really must).

Being a professional coder is often more about learning how to do things to make life easier for fellow developers rather than saving a few lines of code.

Enough already
Let me illustrate what I'm asking with an example:Consider an internal class I've written with a functionvoid foo(IBar bar);Since this is an internal class and I am going to be using it I expect a non-null instance of bar to be passed. So I put an assertion checking that bar is not null.In future, if I make a mistake and pass a null bar (which indicates a catastrophic bug) I will get an assertion in debug mode.In release mode (with assertions turned off) the app will crash, maybe not even at that function.So why shouldn't this assertion be left in in Release mode?
obelix
Throwing an [ArgumentNullException](http://msdn.microsoft.com/en-us/library/system.argumentnullexception%28VS.95%29.aspx) in foo() when the argument is null would be more robust than relying on assertions.
Andréas Saudemont