封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼

https://mp.weixin.qq.com/s/VZheqY0SQwFa0SSBd3uKTQ

前言

在实际工作中,我们常常会遇到转换基础数据类型的需求,比如将一个数值字符串转换为数值类型。

C# 内置了很多丰富的类库和方法来处理这些的场景,但这些方法往往分散且繁杂,每次遇到不同的基础数据类型转换需求时,我们都需要去查找相应的方法,效率低下且耗时。

有没有一个万能的基础数据类型转换器,不管是什么基础数据类型的转换需求,都能胜任呢?

这正是我今天要跟大家分享的,这是我自己封装的一个方法,我称之为 "万能基础数据类型转换器",已经在我的很多项目中帮了大忙,希望也能帮到你。

代码

namespace CommonUtil
{
 /// <summary>
 /// 万能基础数据类型转换器
 /// </summary>
 /// <typeparam name="T">目标基础数据类型</typeparam>
 /// <param name="obj">待转换数据</param>
 /// <returns>转换后的数据,类型为 T</returns>
 public static T DataConverter<T>(Object obj)
 {
  try
  {
   // 如果传入对象是 null 或 DBNull,并且目标类型是 string,返回空字符串
   if ((obj == null || obj == DBNull.Value) && (typeof(T) == typeof(string)))
   {
    return (T)Convert.ChangeType(""typeof(T));
   }
   
   // 如果传入对象已经是目标类型,直接返回
   if (obj is T)
   {
    return (T)obj;
   }
   
   // 处理 Nullable<T> 类型
   if (typeof(T).IsGenericType)
   {
    Type genericTypeDefinition = typeof(T).GetGenericTypeDefinition();
    if (genericTypeDefinition == typeof(Nullable<>))
    {
     return (T)Convert.ChangeType(obj, Nullable.GetUnderlyingType(typeof(T)));
    }
   }
   
   // 进行类型转换
   return (T)Convert.ChangeType(obj, typeof(T));
  }
  catch (InvalidCastException ex)
  {
   // 如果发生转换异常,尝试返回原对象的强制转换
   return (T)obj;
  }
  catch (Exception ex)
  {
   // 其他异常直抛
   throw;
  }

  // 返回目标类型的默认值
  return default(T);
 }
}

使用示列

// 将 null 转换为目标类型,默认为该类型的默认值
var result = CommonUtil.DataConverter<T>(null);

// 从字典中获取一个值并转换
var result = CommonUtil.DataConverter<T>(valueDict[key]);

// 将字符串 "True" 转换为布尔类型
var result = CommonUtil.DataConverter<bool>("True");

// 将字符串 "123" 转换为整型
var result = CommonUtil.DataConverter<int>("123");

// 尝试将无效字符串 "test" 转换为整型,捕获异常
var result = CommonUtil.DataConverter<int>("test");

// 将整型 123 转换为字符串
var result = CommonUtil.DataConverter<string>(123);

// 将 null 转换为字符串,返回空字符串
var result = CommonUtil.DataConverter<string>(null);

结论

这个 "万能基础数据类型转换器" ,你可以将它直接应用到你的项目中,

通过这个封装的方法,当你遇到需要进行数据类型转换的情况时,

再也不需要浪费时间寻找合适的方法了,相信它可以帮助你大大提高工作效率!

最后,如果你有更好的想法或建议,欢迎留言讨论!

posted @   firespeed  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起