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);
}
}