宜昌平台网站建设,深圳搜索优化排名公司,珠海网站建设在哪里,网站 横幅使用OptionT类型二不是null是解决空值问题的另一种策略。与null相比#xff0c;OptionT类型是一个更安全的方法#xff0c;因为它同样适用于值类型和引用类型。而且它的功能更强大#xff0c;因为它用“元数据”的方法保存一个值的额外信息#xff0c;因此… 使用OptionT类型二不是null是解决空值问题的另一种策略。与null相比OptionT类型是一个更安全的方法因为它同样适用于值类型和引用类型。而且它的功能更强大因为它用“元数据”的方法保存一个值的额外信息因此允许我们使用某个类型的整个值域包括null本身。以下是完整代码。 public sealed class Option{private Option() { }public static OptionT SomeT(T value){return new OptionT(value);}public static readonly Option None new Option();}public static class OptionHelpers{public static OptionT ToOptionT(this T val){return Option.Some(val);}public static OptionT ToNotNullOptionT(this T val) where T : class{return val ! null ? val.ToOption() : Option.None;}}public sealed class OptionT{private readonly T value;public T Value{get { return value; }}private readonly bool hasValue;public bool HasValue{get { return hasValue; }}public bool IsSome{get { return hasValue; }}public bool IsNone{get { return !hasValue; }}public Option(T value){this.value value;this.hasValue true;}private Option(){}private static readonly OptionT None new OptionT();public static bool operator (OptionT a, OptionT b){return a.HasValue b.HasValue EqualityComparerT.Default.Equals(a.Value, b.Value);}public static bool operator !(OptionT a, OptionT b){return !(a b);}public static implicit operator OptionT(Option option){return None;}public override int GetHashCode(){int hashCode hasValue.GetHashCode();if (hasValue)hashCode ^ value.GetHashCode();return hashCode;}public override bool Equals(object obj){return base.Equals(obj);}public OptionR BindR(FuncT, OptionR g){if (IsNone)return Option.None;return g(Value);}} 转载于:https://www.cnblogs.com/zhangyuanbo12358/articles/4425373.html