[Mono-dev] gmcs and The Future

Jonathan Pryor jonpryor at vt.edu
Thu Feb 5 12:19:41 EST 2009


On Thu, 2009-02-05 at 12:10 -0500, Avery Pennarun wrote:
> (The reason I use cpp, incidentally, is so I can implement C-style
> assert() and check() macros that actually print the condition being
> tested as part of the assertion message.  There seems to be no other
> way to do this in C#, which is too bad.)

There is now.  It's not the most performant technique around, but your
Assert() or Check() methods could take an Expression<T>.  The
Expression<T> can then be converted into a string for diagnostic
messages, and converted into a delegate for the actual condition check,
e.g.:

	[Conditional("DEBUG")]
	static void Assert<T>(T value, Expression<Func<T, bool>> e)
	{
		Func<T,bool> d = e.Compile();
		if (!d (value)) {
			// Convert `e' to a string and log
		}
	}

	// ...

	Assert(self, v => v != null);

All that's really needed for this is a way to convert the Expression
into a usable string, which may already exist for all I know...

 - Jon




More information about the Mono-devel-list mailing list