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.

128 lines
4.0 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. using Apewer.Internals;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. namespace Apewer
  6. {
  7. /// <summary>结果状态,Code 为零时表示正常,Code 0 与 NULL 相等。</summary>
  8. [Serializable]
  9. public class Result
  10. {
  11. private int _code;
  12. private string _message;
  13. /// <summary>代码。</summary>
  14. public int Code { get => _code; protected set => _code = value; }
  15. /// <summary>消息。</summary>
  16. public string Message { get => _message; protected set => _message = value; }
  17. /// <summary>创建实例:Code = 0,Message = NULL。</summary>
  18. public Result() { }
  19. /// <summary>创建实例。</summary>
  20. public Result(int code, string message = null)
  21. {
  22. _code = code;
  23. _message = message;
  24. }
  25. /// <summary>创建实例:Code = 0。</summary>
  26. public Result(string message, int code = 0)
  27. {
  28. _code = code;
  29. _message = message;
  30. }
  31. /// <summary></summary>
  32. public override string ToString()
  33. {
  34. if (string.IsNullOrEmpty(_message)) return Code.ToString();
  35. if (Code == 0) return _message;
  36. return Code.ToString() + "|" + _message;
  37. }
  38. #region 运算符。
  39. /// <summary>获取 Code。</summary>
  40. public static implicit operator int(Result result) => result == null ? 0 : result._code;
  41. /// <summary>ToString</summary>
  42. public static implicit operator string(Result result) => result == null ? null : result.ToString();
  43. #endregion
  44. }
  45. /// <summary>装箱返回结果,T 不适用于 System.String。</summary>
  46. [Serializable]
  47. public class Result<T> : Result, IDisposable
  48. {
  49. private T _value;
  50. private bool _has = false;
  51. /// <summary>对象。</summary>
  52. public T Value { get => _value; set => Set(value); }
  53. /// <summary>含有实体对象。</summary>
  54. public bool HasValue { get => _has; }
  55. /// <summary>执行与释放或重置非托管资源关联的应用程序定义的任务。</summary>
  56. public void Dispose() => RuntimeUtility.Dispose(Value);
  57. /// <summary>创建实例:Code = 0,Message = NULL,Value = Default。</summary>
  58. public Result() { }
  59. /// <summary>创建实例:Code = 0,Message = NULL。</summary>
  60. public Result(T value) => Set(value);
  61. /// <summary>创建实例:Value = Default。</summary>
  62. public Result(string message, int code = 0) : base(message, code) { }
  63. /// <summary>创建实例:Value = Default。</summary>
  64. public Result(int code, string message = null) : base(code, message) { }
  65. /// <summary>创建实例:Value = Default。</summary>
  66. public Result(Exception exception, int code = 0) : base(RuntimeUtility.Message(exception), code) { }
  67. /// <summary>创建实例:Value = Default。</summary>
  68. public Result(int code, Exception exception = null) : base(code, RuntimeUtility.Message(exception)) { }
  69. private void Set(T value)
  70. {
  71. _value = value;
  72. _has = typeof(T).IsValueType ? true : (value != null);
  73. }
  74. #region 运算符。
  75. /// <summary>含有实体对象。</summary>
  76. public static implicit operator bool(Result<T> result) => result == null ? false : result._has;
  77. #endregion
  78. #region 扩展方法。
  79. internal static Result<TDst> As<TSrc, TDst>(Result<TSrc> source) where TDst : TSrc
  80. {
  81. if (source == null) return null;
  82. var destination = new Result<TDst>();
  83. destination.Code = source.Code;
  84. destination.Message = source.Message;
  85. if (source._has)
  86. {
  87. var maybe = source._value is TDst;
  88. try { destination.Set((TDst)source._value); } catch { }
  89. }
  90. return destination;
  91. }
  92. #endregion
  93. }
  94. }