public static void CheckValue <T>(Optional <T> optional, Action <T> assert, [CallerArgumentExpression("optional")] string name = null) { if (!optional.HasValue) { return; } try { assert(optional.Value); } catch (Exception ex) { Throw.ArgumentExceptionForCheckValue(optional, name, ex); } }