C#类型转换最佳实践

在C#中,类型转换通常用于将一个数据类型转换为另一个数据类型的过程,常用的类型转换分为:隐式类型转换(自动类型转换)和显示类型转换(强制转换)。

一、隐式类型转换(Implicit Conversion / 自动类型转换):

隐式类型转换也被称为自动类型转换,满足该类型转换的前置条件分别为:

a):需要转换的两种类型要兼容:

eg:int和double兼容(两种都是数字类型)

b):目标类型(要转换的类型)>原类型(原有的数据类型):

eg:double > int

//原类型

复制代码
int number = 20;//目标类型double dd = number;//隐式类型转换,也称自动类型转换Console.WriteLine($"dd的值为:{dd}");//运行结果dd的值为:20

隐式类型转换是编译器自动完成的转换,通常不会造成数据的丢失,隐式类型转换常用的场景:

1、数值类型之间的"小转大"的转换,比如:byte-->short-->int-->long或float-->double;

2、引用类型的向上转型,比如子类到父类或实现类到接口的转换。

二、显示类型转换(Explicit Conversion / 强制转换):

当一个较大精度的数据类型要转换为一个较小精度的数据类型时,需要使用显示转换,在显示转换的过程中可能会丢失信息,显示转换需要通过强制转换操作符(type)来实现。

满足显示类型转换的前置条件分别为:

a):转换的两种类型需要相互兼容;

b):目标类型 < 原类型

转换语法:(目标类型)要转换的变量

复制代码
double dd = 12.6;int number = (int)dd;Console.WriteLine($"number的值为:{number}");//运行结果number的值为:12

显示类型转换适用于以下情况:

1、数值类型之间的"大转小"情况,如long-->int,float-->int;

2、基类到派生类的转换(需要显示指定);

3、需要手动控制转换过程以避免精度损失的情况;

三、其他类型转换方式:

除了上述两种转换方式外,日常还有其他几种转换方式:

1、使用Convert类:

System.Convert类提供了一组静态方法,用于在不同数据类型之间进行转换:​​​​​​​

复制代码
string str = "123";//注意,string类型的字符串必须是数字,否则在转换的过程抛异常int number = Convert.ToInt32(str);Console.WriteLine($"number值为:{number}");//运行结果number值为:123

2、使用Parse和TryParse方法:

int.Parse():将字符串转换为整数,若失败抛异常;

int.TryParse():尝试将字符串转换为整数,若失败则返回false,不抛异常;​​​​​​​

复制代码
string str="123";int number2 = int.Parse(str);Console.WriteLine($"number2值为:{number2}");
bool isParse = int.TryParse(str,out int result);Console.WriteLine($"是否转换成功:{isParse},转换结果:{result}");//运行结果number2值为:123是否转换成功:True,转换结果:123

3、安全转换关键字:is和as

在引用类型转换中,可以使用is和as关键字来避免转换过程中抛异常:

is:用于判断对象是否为指定类型,是则返回true,否则返回false;

as:用于安全转换,如果转换失败则返回null,转换成功则返回实例对象;

总结:

在C# 代码编辑中,类型转换后续常用到的是引用类型之间的转换,需要熟练掌握转换的方式方法,以及底层逻辑。加油,共勉!

​

相关推荐
niucloud-admin几秒前
JAVA V6 多商户商城 开发文档——手机端前端
java·开发语言·前端
云安全助手6 分钟前
自建接入VS聚合平台:企业 AI 调用的选型思路与迁移成本拆解
java·大数据·数据库·人工智能·ai大模型
樱花落木兰7 分钟前
SpringBoot + ECharts 后台数据统计报表模块实战
java·javascript·spring boot·ai·log4j·github·echarts
霸道流氓气质16 分钟前
Dify 可视化 LLM 应用开发平台完全指南:从Workflow编排到Java生产级集成实战
java·开发语言
m0_5873830020 分钟前
24小时自助健身房软硬件解决方案实战:从架构设计到部署指南
java·spring·小程序·架构·需求分析
CallFay云起未来39 分钟前
AI客服上线后多久才能回本?从TCO到ROI的完整测算方法
java·大数据·人工智能·架构·文心一言
Sam_Deep_Thinking39 分钟前
什么是CountDownLatch?
java·后端·面试·程序员
小蒜学长1 小时前
基于SpringBoot和Vue的低卡食品销售系统的设计与实现(代码+数据库+LW)
java·后端·springboot·健康管理·低卡食品销售系统
CRMEB系统商城1 小时前
前后端技术栈全面换代!CRMEB 多商户(Java)v3.0更新预告
java·开发语言·小程序·php
Sayai1 小时前
Neo4j 内嵌模式(Embedded)实战:Java 嵌入式 vs 服务端部署的写入性能对比与 GC 调优
java·开发语言·性能优化·neo4j·图数据库