using System; using System.Collections.Generic; namespace Masuit.Tools.Systems; /// /// 可空对象 /// /// public readonly record struct NullObject : IComparable, IComparable, IEquatable> { public NullObject() { } public NullObject(T item) { Item = item; } public static NullObject Null => new(); public T Item { get; } /// /// 是否是null /// /// public bool IsNull => Item.IsDefaultValue(); /// /// 隐式转换 /// /// public static implicit operator T(NullObject nullObject) { return nullObject.Item; } /// /// 隐式转换 /// /// public static implicit operator NullObject(T item) { return new NullObject(item); } public override string ToString() { return (Item != null) ? Item.ToString() : "NULL"; } public int CompareTo(object value) { if (value is NullObject nullObject) { if (nullObject.Item is IComparable c) { return ((IComparable)Item).CompareTo(c); } return Item.ToString().CompareTo(nullObject.Item.ToString()); } return 1; } public int CompareTo(T other) { if (other is IComparable c) { return ((IComparable)Item).CompareTo(c); } return Item.ToString().CompareTo(other.ToString()); } public override int GetHashCode() { return EqualityComparer.Default.GetHashCode(Item); } /// 指示当前对象是否等于同一类型的另一个对象。 /// 一个与此对象进行比较的对象。 /// 如果当前对象等于 参数,则为 true;否则为 false。 public bool Equals(NullObject other) { return EqualityComparer.Default.Equals(Item, other.Item); } }