Discriminated-unions in C#
This looks very well crafted. I don't know f# and I'm not really into functional programming, but I can enumerate everything I like about this code:


Type parameter names are descriptive: TValue and TResult are perfect.
The interface for Optional&lt;TValue&gt; is segregated; it's very focused and specialized, which makes it highly reusable... which is a nice feature for an abstract class.
Usage of this qualifier is consistent.


Well as I enumerated these points I did find a few minor nitpicks:


Usage of this qualifier is redundant.
Usage of String could be replaced with C# language alias string (but then again usage of String is beautifully consistent).


And as I enumerated these minor nitpicks I did find one tiny little thing that could be improved: the Message property in the derived types is only assigned through the constructor, using the private setter. I'd make it readonly and change the auto-property for a get-only property:

public None(String message)
{
    _message = message;
}

private readonly String _message;
public String Message { get { return _message; } }


...and this is where I'm clashing with this - I prefer prefixing private fields with an underscore and avoid this altogether, you might have it like this instead:

public None(String message)
{
    this.message = message;
}

private readonly String message;
public String Message { get { return this.message; } }