Created
July 26, 2016 10:44
-
-
Save Boggin/d53660f32aeaa35e0b028919ddc465e3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public struct Option<T> | |
{ | |
private readonly T _value; | |
public T Value | |
{ | |
get | |
{ | |
if (!HasValue) | |
throw new InvalidOperationException(); | |
return _value; | |
} | |
} | |
public bool HasValue | |
{ | |
get { return _value != null; } | |
} | |
public Option(T value) | |
{ | |
_value = value; | |
} | |
public static implicit operator Option<T>(T value) | |
{ | |
return new Option<T>(value); | |
} | |
} | |
public class User | |
{ | |
public int Id; | |
public string Name; | |
} | |
public Option<User> GetUser(int id) | |
{ | |
var users = new List<User> | |
{ | |
new User { Id = 1, Name = "Joe Bloggs" }, | |
new User { Id = 2, Name = "John Smith" } | |
}; | |
var u = users.FirstOrDefault(user => user.Id == id); | |
return u != null ? new Option<User>(u) : new Option<User>(); | |
} | |
var maybeUser = GetUser(2); | |
var username = maybeUser.HasValue ? maybeUser.Value.Name : string.Empty; | |
System.Console.WriteLine("username: " + username); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment