using System.Collections; using System.Collections.Generic; using System.Linq; namespace mRemoteNG.Tools { public class Maybe : IEnumerable { private readonly T[] _maybe; public Maybe() { _maybe = new T[0]; } public Maybe(T value) { _maybe = value != null ? new[] {value} : new T[0]; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public IEnumerator GetEnumerator() { return ((IEnumerable)_maybe).GetEnumerator(); } public override string ToString() { return _maybe.Any() ? _maybe.First().ToString() : ""; } public static implicit operator Maybe(T value) { return new Maybe(value); } public static Maybe FromNullable(TOut? value) where TOut : struct { return value.HasValue ? new Maybe(value.Value) : new Maybe(); } } }