Controlling randomizer using code contracts

One cool addition to Visual Studio 2010 is support for code contracts. Code contracts make sure that all conditions under what method is supposed to run correctly are met. Those who are familiar with unit tests will find code contracts easy to use. In this posting I will demonstrate simple example about static code contract checking.

To try out code contracts you need at least Visual Studio 2010 Standard Edition. Also you need code contracts package. You can download package from DevLabs Code Contracts page.

NB! Speakers, you can use the example solution in your presentations as long as you mention me and this blog in your sessions. Solution has readme.txt file that gives you steps to go through when presenting solution in sessions. This blog posting is companion posting for Visual Studio solution referred below.

As an example let’s look at the following class.

public class Randomizer
public static int GetRandomFromRange(int min, int
var rnd = new Random
rnd.Next(min, max);

public static int GetRandomFromRangeContracted(int min, int
Contract.Requires(min < max, "Min must be less than max"

var rnd = new Random
return rnd.Next(min, max);

GetRandomFromRange() method returns results without any checking. GetRandomFromRangeContracted() uses one code contract that makes sure that minimum value is less than maximum value. Now let’s run the following code.

class Program
static void Main(string
[] args)
var random1 = Randomizer
.GetRandomFromRange(0, 9);
Console.WriteLine("Random 1: "
+ random1);

var random2 = Randomizer
.GetRandomFromRange(1, 1);
Console.WriteLine("Random 2: "
+ random2);

var random3 = Randomizer
.GetRandomFromRangeContracted(5, 5);
Console.WriteLine("Random 3: "
+ random3);

Console.WriteLine(" "
Console.WriteLine("Press any key to exit ..."

As we have not turned on support for code contracts the code runs without any problems and we get no warnings by Visual Studio that something is wrong.

Now let’s turn on static checking for code contracts. As you can see then code still compiles without any errors but Visual Studio warns you about possible problems with contracts.

Static code contracts settings

When we open Error list and run our application we get the following output to errors list. Note that these messages are not shown immediately. There is little delay between application starting and appearance of these messages. So wait couple of seconds before going out of your mind.

Results of static code contracts

If you look at these warnings you can see that warnings show you illegal calls and also contracts against what they are going. Third warning points to GetRandomFromRange() method and shows that there should be also problem that can be detected by contract.

Serverless360 Logo

A portal focused on Operations and Support for Microsoft Azure Serverless services


Gunnar Peipman

Gunnar Peipman is ASP.NET, Azure and SharePoint fan, Estonian Microsoft user group leader, blogger, conference speaker, teacher, and tech maniac. Since 2008 he is Microsoft MVP specialized on ASP.NET.

    One thought on “Controlling randomizer using code contracts

    Leave a Reply

    Your email address will not be published. Required fields are marked *