I’m Missing My Default Parameter Values

I miss default parameter values from C++. In C# if I have some method Foo;

  static void Foo(int intValue, float floatValue, string stringValue)
  {
  }

and there’s the possibility that all the parameters can be “optional” then I end up writing something like;

  static void Foo()
  {
    Foo(0, 0.0f, null);
  }
  static void Foo(int intValue)
  {
    Foo(intValue, 0.0f, null);
  }
  static void Foo(int intValue, float floatValue)
  {
    Foo(intValue, floatValue, null);
  }
  static void Foo(int intValue, float floatValue, string stringValue)
  {
  }

which is a lot of code when I really just want to say;

  static void Foo(int intValue = 0, float floatValue = 0.0f, string stringValue = null)
  {
  }

and my C++ compiler would have been happy with that but my C# compiler isn’t going to be. Pity as I think that the single function definition is a lot nicer than the multiple function definitions. With object initialisation in C# V3.0 you almost feel like writing;

public class ArgType
{
  public int intValue = 0;
  public float floatValue = 0;
  public string stringValue = null;
}
class Program
{
  static void Main(string[] args)
  {
    Foo(new ArgType() { intValue = 10 });
  }
  static void Foo(ArgType arg)
  {
  }
}

but then two wrongs are never going to make a right 🙂