A few months ago, I started a small project on Codeplex , its goal was simple : providing an alternative to the default Windows Forms MessageBox. One of the things that annoyed me with the MessageBox was to be forced to provide values for parameters I did not want to change. Here is a little example : MessageBox.Show("Text", "Caption", MessageBoxButtons.OK, MessageBoxIcon.Information); Clearly in this case, I should not have to specify the third parameter since it is already the default value. So basically, I needed to create a method ( Show in this case) that take a variable number of parameters. The problem was with the types of the parameters, I have a whole lot of different types. At that time, I had two ways to achieve that : Providing an overload of Show for each combination of parameters. Using params and the only type shared by all the parameters : object. The first one is nice when you have two parameters, but in InformationBox we are now dealing with up t...