C# implementation of a Maybe type