今天写代码的时候,突然遇到一个问题,即类型转换。C#提供的类型转换有强制转换和采用 as进行转换。
那问题就来了,在一个对象类型确定的情况下,对它进行类型转换是采用强制转换还是采用as进行转换。如以下情况:

在确定hashtable值的类型为字符串的情况下,用那种方式效率会高一点?
我的第一反映是google一下,google了十几分钟,没有找到满意的答案。不过有一个说明是这样的,在类型转换时,as首先进行类型判断,如果转换成功返指定类型的结果,如过类型不兼容,则返回空。而强转不进行类型判断,转换失败后会抛出异常,所以在强制转换类型是需加入异常处理。代码如下:
try
{
string result2 = (string)table[1];
}
catch (Exception e)
{
throw e;
}
{
string result2 = (string)table[1];
}
catch (Exception e)
{
throw e;
}
这样看来还是采用as好,但是在类型确定的情况下,即table的值只会是字符串,不会是其它类型或空的情况下,在强转时就不用加异常判断。那么用as还是强制转换呢?问题没有解决,我想到看看as和强转的IL代码,看是否能找到相关线索。以上代码的IL代码我就不贴出来了,就把关键的代码贴出来。如下:
IL_0025: isinst [mscorlib]System.String
IL_002a: stloc.1
IL_0037: castclass [mscorlib]System.String
IL_003c: stloc.2
IL_002a: stloc.1
IL_0037: castclass [mscorlib]System.String
IL_003c: stloc.2
问题出来了,即as和强制转换的区别是两个关键的不同,isinst和castclass。除了关键字的不同,找不到其它的了,IL并没有告诉我答案,IL代码和C#代码没太大区别。在去google一下两个关键字的说明名解释。没有找到满意的答案。
希望园子里的高手能帮小弟回答这个问题,在类型确定的情况下,是采用as做类型转换还是强制转换。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?