C#-Conver的简单封装(Object->常见类型)

复制代码
  1 using Newtonsoft.Json;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Collections.Specialized;
  5 using System.ComponentModel;
  6 using System.Data;
  7 using System.IO;
  8 using System.Reflection;
  9 using System.Text.RegularExpressions;
 10 
 11 namespace Common
 12 {
 13     public class ConverHelper
 14         {
 15             #region object 转换T类型数据
 16             /// <summary>
 17             /// 转换 object为 T 类型
 18             /// </summary>
 19             /// <typeparam name="T">T 类型</typeparam>
 20             /// <param name="obj">object 数据</param>
 21             /// <param name="defVal">默认值</param>
 22             /// <param name="exp">是否抛出异常</param>
 23             /// <returns></returns>
 24             public static T ToTSource<T>(object obj, T defVal = default(T), bool exp = false)
 25             {
 26                 T result = defVal;
 27                 if (obj == null)
 28                 {
 29                     return result;
 30                 }
 31                 if (obj is T)
 32                 {
 33                     return (T)obj;
 34                 }
 35 
 36                 try
 37                 {
 38                     Type conversionType = typeof(T);
 39                     object obj2 = null;
 40                     if (conversionType.Equals(typeof(Guid)))
 41                         obj2 = new Guid(Convert.ToString(obj));
 42                     else
 43                         obj2 = Convert.ChangeType(obj, conversionType);
 44                     result = (T)obj2;
 45                 }
 46                 catch (Exception ex)
 47                 {
 48                     if (exp == true)
 49                     {
 50                         throw ex;
 51                     }
 52                 }
 53                 return result;
 54             }
 55             #endregion
 56 
 57             #region 数值类型转换
 58             #region 转换为 bool 类型
 59             /// <summary>
 60             /// 将object转换为 bool 类型
 61             /// </summary>
 62             /// <param name="obj">待转换的object</param>
 63             /// <param name="defVal">缺省值(转换不成功)</param>
 64             /// <param name="exp">是否抛出异常(默认不抛出)</param>
 65             /// <returns>转换后的bool类型结果</returns>
 66             public static bool ToBool(object obj, bool defVal = false, bool exp = false)
 67             {
 68                 bool result = defVal;
 69                 try
 70                 {
 71                     if (obj != null)
 72                         result = Convert.ToBoolean(obj);
 73                 }
 74                 catch (Exception ex)
 75                 {
 76                     if (exp == true)
 77                     {
 78                         throw ex;
 79                     }
 80                 }
 81                 return result;
 82             }
 83 
 84             #endregion
 85 
 86             #region 转换为 Int 数值类型
 87             /// <summary>
 88             /// 将object转换Int 类型
 89             /// </summary>
 90             /// <param name="str">待转换的object</param>
 91             /// <param name="defVal">缺省值(转换不成功)</param>
 92             /// <param name="exp">是否抛出异常(默认不抛出)</param>
 93             /// <returns>转换后的Int类型结果</returns>
 94             public static int ToInt(object obj, int defVal = 0, bool exp = false)
 95             {
 96                 int result = defVal;
 97                 try
 98                 {
 99                     if (obj != null)
100                         result = Convert.ToInt32(obj);
101                 }
102                 catch (Exception ex)
103                 {
104                     if (exp == true)
105                     {
106                         throw ex;
107                     }
108                 }
109                 return result;
110             }
111 
112             #endregion
113 
114             #region 转换为 Float 数值类型
115             /// <summary>
116             /// 将object转换 Float 类型
117             /// </summary>
118             /// <param name="str">待转换的object</param>
119             /// <param name="defVal">缺省值(转换不成功)</param>
120             /// <param name="exp">是否抛出异常(默认不抛出)</param>
121             /// <returns>转换后的Int类型结果</returns>
122             public static float ToFloat(object obj, float defVal = 0, bool exp = false)
123             {
124                 float result = defVal;
125                 try
126                 {
127                     if (obj != null)
128                         result = Convert.ToSingle(obj);
129                 }
130                 catch (Exception ex)
131                 {
132                     if (exp == true)
133                     {
134                         throw ex;
135                     }
136                 }
137                 return result;
138             }
139 
140             #endregion
141 
142             #region 转换为 Double 数值类型
143             /// <summary>
144             /// 将object转换 double 类型
145             /// </summary>
146             /// <param name="str">待转换的object</param>
147             /// <param name="defVal">缺省值(转换不成功)</param>
148             /// <param name="exp">是否抛出异常(默认不抛出)</param>
149             /// <returns>转换后的Int类型结果</returns>
150             public static double ToDouble(object obj, double defVal = 0, bool exp = false)
151             {
152                 double result = defVal;
153                 try
154                 {
155                     if (obj != null)
156                         result = Convert.ToDouble(obj);
157                 }
158                 catch (Exception ex)
159                 {
160                     if (exp == true)
161                     {
162                         throw ex;
163                     }
164                 }
165                 return result;
166             }
167 
168             #endregion
169 
170             #region 转换为 decimal 数值类型
171             /// <summary>
172             /// 将对象转换 decimal 类型
173             /// </summary>
174             /// <param name="obj">待转换的字符串</param>
175             /// <param name="defVal">缺省值(转换不成功)</param>
176             /// <param name="exp">是否抛出异常(默认不抛出)</param>
177             /// <returns>转换后的decimal类型结果</returns>
178             public static decimal ToDecimal(object obj, decimal defVal = 0m, bool exp = false)
179             {
180                 decimal result = defVal;
181                 try
182                 {
183                     if (obj != null)
184                         result = Convert.ToDecimal(obj);
185                 }
186                 catch (Exception ex)
187                 {
188                     if (exp == true)
189                     {
190                         throw ex;
191                     }
192                 }
193                 return result;
194             }
195             #endregion
196             #endregion
197 
198             #region 转换为 DateTime 日期类型
199             /// <summary>
200             /// 将object转换 DateTime 日期类型
201             /// </summary>
202             /// <param name="str">待转换的字符串</param>
203             /// <param name="defVal">缺省值(转换不成功)</param>
204             /// <param name="exp">是否抛出异常(默认不抛出)</param>
205             /// <returns>转换后的DateTime类型结果</returns>
206             public static DateTime ToDateTime(object obj, string defVal = "1970-01-01 08:00:00", bool exp = false)
207             {
208                 DateTime result = DateTime.Parse(defVal);
209                 try
210                 {
211                     if (obj != null)
212                         result = Convert.ToDateTime(obj);
213                 }
214                 catch (Exception ex)
215                 {
216                     if (exp == true)
217                     {
218                         throw ex;
219                     }
220                 }
221                 return result;
222             }
223 
224             #endregion
225 
226             ///     将数据转化为 type 类型
227             /// </summary>
228             /// <param name="value">要转化的值</param>
229             /// <param name="type">目标类型</param>
230             /// <returns>转化为目标类型的 Object 对象</returns>
231             private static object ChangeType(object value, Type type)
232             {
233                 if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
234                 {
235                     NullableConverter convertor = new NullableConverter(type);
236                     return Convert.IsDBNull(value) ? null : convertor.ConvertFrom(value);
237                 }
238                 return Convert.ChangeType(Convert.IsDBNull(value) ? null : value, type);
239             }
240 
241             #endregion
242 
243             #region 杂项转换
244             /// <summary>
245             /// 获取默认值
246             /// </summary>
247             /// <param name="type"></param>
248             /// <returns></returns>
249             private static object GetNullInternal(Type type)
250             {
251                 if (type.IsValueType)
252                 {
253                     if (type.IsEnum)
254                     {
255                         return GetNullInternal(Enum.GetUnderlyingType(type));
256                     }
257                     if (type.IsPrimitive)
258                     {
259                         if (type == typeof(int))
260                         {
261                             return 0;
262                         }
263                         if (type == typeof(double))
264                         {
265                             return 0.0;
266                         }
267                         if (type == typeof(short))
268                         {
269                             return (short)0;
270                         }
271                         if (type == typeof(sbyte))
272                         {
273                             return (sbyte)0;
274                         }
275                         if (type == typeof(long))
276                         {
277                             return 0L;
278                         }
279                         if (type == typeof(byte))
280                         {
281                             return (byte)0;
282                         }
283                         if (type == typeof(ushort))
284                         {
285                             return (ushort)0;
286                         }
287                         if (type == typeof(uint))
288                         {
289                             return 0;
290                         }
291                         if (type == typeof(ulong))
292                         {
293                             return (ulong)0L;
294                         }
295                         if (type == typeof(ulong))
296                         {
297                             return (ulong)0L;
298                         }
299                         if (type == typeof(float))
300                         {
301                             return 0f;
302                         }
303                         if (type == typeof(bool))
304                         {
305                             return false;
306                         }
307                         if (type == typeof(char))
308                         {
309                             return '\0';
310                         }
311                     }
312                     else
313                     {
314                         if (type == typeof(DateTime))
315                         {
316                             return DateTime.MinValue;
317                         }
318                         if (type == typeof(decimal))
319                         {
320                             return 0M;
321                         }
322                         if (type == typeof(Guid))
323                         {
324                             return Guid.Empty;
325                         }
326                         if (type == typeof(TimeSpan))
327                         {
328                             return new TimeSpan(0, 0, 0);
329                         }
330                     }
331                 }
332                 return null;
333             }
334             #endregion
335             #endregion
336 
337             #region 转换字符串
338             /// <summary>
339             /// 转换字符串,因为可能有空,直接转换会报错
340             /// </summary>
341             /// <param name="obj"></param>
342             /// <param name="defVal"></param>
343             /// <returns></returns>
344             public static string ToString(object obj, string defVal = "")
345             {
346                 string result = defVal;
347                 if (obj == null)
348                 {
349                     return result;
350                 }
351                 return obj.ToString();
352             }
353             #endregion
354         }
355     }
复制代码

 

posted @   ꧁执笔小白꧂  阅读(161)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
历史上的今天:
2021-01-20 Android的Looper.loop()消息循环机制
2021-01-20 申请读写sd卡权限shell
2021-01-20 Linux系统知识(四)-Shell脚本学习笔记
2021-01-20 Android Studio常用快捷方式
2021-01-20 Android ContentProvider操作其他应用程序共享的数据
点击右上角即可分享
微信分享提示