Extensions.Convert.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. using System;
  2. namespace WMS.Util
  3. {
  4. /// <summary>
  5. /// 描 述:类型转换扩展
  6. /// </summary>
  7. public static partial class Extensions
  8. {
  9. #region 数值转换
  10. /// <summary>
  11. /// 转换为整型
  12. /// </summary>
  13. /// <param name="data">数据</param>
  14. public static int ToInt(this object data)
  15. {
  16. if (data == null)
  17. return 0;
  18. int result;
  19. var success = int.TryParse(data.ToString(), out result);
  20. if (success)
  21. return result;
  22. try
  23. {
  24. return Convert.ToInt32(ToDouble(data, 0));
  25. }
  26. catch (Exception)
  27. {
  28. return 0;
  29. }
  30. }
  31. /// <summary>
  32. /// 转换为可空整型
  33. /// </summary>
  34. /// <param name="data">数据</param>
  35. public static int? ToIntOrNull(this object data)
  36. {
  37. if (data == null)
  38. return null;
  39. int result;
  40. bool isValid = int.TryParse(data.ToString(), out result);
  41. if (isValid)
  42. return result;
  43. return null;
  44. }
  45. /// <summary>
  46. /// 转换为双精度浮点数
  47. /// </summary>
  48. /// <param name="data">数据</param>
  49. public static double ToDouble(this object data)
  50. {
  51. if (data == null)
  52. return 0;
  53. double result;
  54. return double.TryParse(data.ToString(), out result) ? result : 0;
  55. }
  56. /// <summary>
  57. /// 转换为双精度浮点数,并按指定的小数位4舍5入
  58. /// </summary>
  59. /// <param name="data">数据</param>
  60. /// <param name="digits">小数位数</param>
  61. public static double ToDouble(this object data, int digits)
  62. {
  63. return Math.Round(ToDouble(data), digits);
  64. }
  65. /// <summary>
  66. /// 转换为可空双精度浮点数
  67. /// </summary>
  68. /// <param name="data">数据</param>
  69. public static double? ToDoubleOrNull(this object data)
  70. {
  71. if (data == null)
  72. return null;
  73. double result;
  74. bool isValid = double.TryParse(data.ToString(), out result);
  75. if (isValid)
  76. return result;
  77. return null;
  78. }
  79. /// <summary>
  80. /// 转换为高精度浮点数
  81. /// </summary>
  82. /// <param name="data">数据</param>
  83. public static decimal ToDecimal(this object data)
  84. {
  85. if (data == null)
  86. return 0;
  87. decimal result;
  88. return decimal.TryParse(data.ToString(), out result) ? result : 0;
  89. }
  90. /// <summary>
  91. /// 转换为高精度浮点数,并按指定的小数位4舍5入
  92. /// </summary>
  93. /// <param name="data">数据</param>
  94. /// <param name="digits">小数位数</param>
  95. public static decimal ToDecimal(this object data, int digits)
  96. {
  97. return Math.Round(ToDecimal(data), digits);
  98. }
  99. /// <summary>
  100. /// 转换为可空高精度浮点数
  101. /// </summary>
  102. /// <param name="data">数据</param>
  103. public static decimal? ToDecimalOrNull(this object data)
  104. {
  105. if (data == null)
  106. return null;
  107. decimal result;
  108. bool isValid = decimal.TryParse(data.ToString(), out result);
  109. if (isValid)
  110. return result;
  111. return null;
  112. }
  113. /// <summary>
  114. /// 转换为可空高精度浮点数,并按指定的小数位4舍5入
  115. /// </summary>
  116. /// <param name="data">数据</param>
  117. /// <param name="digits">小数位数</param>
  118. public static decimal? ToDecimalOrNull(this object data, int digits)
  119. {
  120. var result = ToDecimalOrNull(data);
  121. if (result == null)
  122. return null;
  123. return Math.Round(result.Value, digits);
  124. }
  125. #endregion
  126. #region 日期转换
  127. /// <summary>
  128. /// 转换为日期
  129. /// </summary>
  130. /// <param name="data">数据</param>
  131. public static DateTime ToDate(this object data)
  132. {
  133. if (data == null)
  134. return DateTime.MinValue;
  135. DateTime result;
  136. return DateTime.TryParse(data.ToString(), out result) ? result : DateTime.MinValue;
  137. }
  138. /// <summary>
  139. /// 转换为可空日期
  140. /// </summary>
  141. /// <param name="data">数据</param>
  142. public static DateTime? ToDateOrNull(this object data)
  143. {
  144. if (data == null)
  145. return null;
  146. DateTime result;
  147. bool isValid = DateTime.TryParse(data.ToString(), out result);
  148. if (isValid)
  149. return result;
  150. return null;
  151. }
  152. #endregion
  153. #region 布尔转换
  154. /// <summary>
  155. /// 转换为布尔值
  156. /// </summary>
  157. /// <param name="data">数据</param>
  158. public static bool ToBool(this object data)
  159. {
  160. if (data == null)
  161. return false;
  162. bool? value = GetBool(data);
  163. if (value != null)
  164. return value.Value;
  165. bool result;
  166. return bool.TryParse(data.ToString(), out result) && result;
  167. }
  168. /// <summary>
  169. /// 获取布尔值
  170. /// </summary>
  171. /// <param name="data">数据</param>
  172. /// <returns></returns>
  173. private static bool? GetBool(this object data)
  174. {
  175. switch (data.ToString().Trim().ToLower())
  176. {
  177. case "0":
  178. return false;
  179. case "1":
  180. return true;
  181. case "是":
  182. return true;
  183. case "否":
  184. return false;
  185. case "yes":
  186. return true;
  187. case "no":
  188. return false;
  189. default:
  190. return null;
  191. }
  192. }
  193. /// <summary>
  194. /// 转换为可空布尔值
  195. /// </summary>
  196. /// <param name="data">数据</param>
  197. public static bool? ToBoolOrNull(this object data)
  198. {
  199. if (data == null)
  200. return null;
  201. bool? value = GetBool(data);
  202. if (value != null)
  203. return value.Value;
  204. bool result;
  205. bool isValid = bool.TryParse(data.ToString(), out result);
  206. if (isValid)
  207. return result;
  208. return null;
  209. }
  210. #endregion
  211. #region 字符串转换
  212. /// <summary>
  213. /// 转换为字符串
  214. /// </summary>
  215. /// <param name="data">数据</param>
  216. public static string ToString(this object data)
  217. {
  218. return data == null ? string.Empty : data.ToString().Trim();
  219. }
  220. public static string ToEmptyString(this object data)
  221. {
  222. return data == null ? string.Empty : data.ToString().Trim();
  223. }
  224. #endregion
  225. }
  226. }