You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.3 KiB

  1. using System;
  2. /// <summary>装箱类。</summary>
  3. public class Class<T>
  4. {
  5. private bool _hashcode = false;
  6. private bool _equals = false;
  7. /// <summary>装箱对象。</summary>
  8. public T Value;
  9. /// <summary></summary>
  10. public bool IsNull
  11. {
  12. get { return Value == null; }
  13. }
  14. /// <summary>创建默认值。</summary>
  15. public Class(T value = default, bool tryValueEquals = true, bool tryValueHashCode = true)
  16. {
  17. Value = value;
  18. _hashcode = tryValueHashCode;
  19. _equals = tryValueEquals;
  20. }
  21. /// <summary></summary>
  22. public override int GetHashCode()
  23. {
  24. if (_hashcode && Value != null)
  25. {
  26. return Value.GetHashCode();
  27. }
  28. return base.GetHashCode();
  29. }
  30. /// <summary></summary>
  31. public override bool Equals(object obj)
  32. {
  33. if (_equals)
  34. {
  35. if (Value == null && obj == null) return true;
  36. if (Value == null && obj != null) return false;
  37. if (Value != null && obj == null) return false;
  38. return Value.Equals(obj);
  39. }
  40. return base.Equals(obj);
  41. }
  42. /// <summary></summary>
  43. public override string ToString()
  44. {
  45. if (Value == null) return null;
  46. return Value.ToString();
  47. }
  48. }