The best I could come up with for reference types was:
using System; public class Gizmo { public int Foo { set; get; } public double Bar { set; get; } public Gizmo(int f, double b) { Foo = f; Bar = b; } } class Demo { static void ShowGizmo(Gizmo g = null) { Gizmo gg = g ?? new Gizmo(12, 34.56); Console.WriteLine("Gizmo: Foo = {0}; Bar = {1}", gg.Foo, gg.Bar); } public static void Main() { ShowGizmo(); ShowGizmo(new Gizmo(7, 8.90)); } }
You can use the same idea for structs by making the parameter nullable:
public struct Whatsit { public int Foo { set; get; } public double Bar { set; get; } public Whatsit(int f, double b) : this() { Foo = f; Bar = b; } } static void ShowWhatsit(Whatsit? s = null) { Whatsit ss = s ?? new Whatsit(1, 2.3); Console.WriteLine("Whatsit: Foo = {0}; Bar = {1}", ss.Foo, ss.Bar); }