封装一个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);
结论
这个 "万能基础数据类型转换器" ,你可以将它直接应用到你的项目中,
通过这个封装的方法,当你遇到需要进行数据类型转换的情况时,
再也不需要浪费时间寻找合适的方法了,相信它可以帮助你大大提高工作效率!
最后,如果你有更好的想法或建议,欢迎留言讨论!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)