My check null

December 20, 2011

There are many solutions on the net for avoiding the null check. Here is mine:

public interface Option<T> { }

public struct Nothing<T> : Option<T> { }

public struct Just<T> : Option<T>
{
    public readonly T Value;

    public Just(T value) { Value = value; }
}

public static class OptionExtentions
{
    public static Option<T> ToOption<T>(this T value)
    {
        return (value == null)
            ? new Nothing<T>() as Option<T>
            : new Just<T>(value);
    }

    public static U Select<T, U>(this Option<T> option,
      Func<T, U> func)
    {
        return option.Select(func, () => default(U));
    }

    public static U Select<T, U>(this Option<T> option, 
      Func<T, U> whereJust, Func<U> whereNothing)
    {
        return option is Just<T>
            ? whereJust(((Just<T>)option).Value)
            : whereNothing();
    }
}

And implementation:

return (from h in HttpContext.Current.ToOption()
       select h.User);
About these ads

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 54 other followers

%d bloggers like this: