Cal*_*son 98 vb.net ctype directcast
我是一位经验丰富的C/C++/C#程序员,刚刚进入VB.NET.我通常使用CType(和CInt,CBool,CStr)进行演员表示,因为它是较少的字符,并且是我接触的第一种投射方式,但我也知道DirectCast和TryCast.
简单来说,DirectCast和CType之间是否有任何差异(演员,表演等的影响)?我理解TryCast的想法.
Joe*_*orn 179
首先要注意的是,VB.NET没有直接模拟C#的(type)instance转换机制.我提出这个问题是因为将它作为比较两个VB.NET运算符的起点很有用(它们是运算符,而不是函数,即使它们具有函数语义).
DirectCast()比C#强制运算符更严格.它只允许你在已经投射的项目是你要投射的类型时施放.它不会进行任何转换.因此,例如,您不能像使用C#(int)强制转换那样从short转换为int .但是如果您的底层IEnumerable对象变量确实是一个,那么您可以从IEnumerable转换为数组Array.当然,您可以从Object转换为任何东西,假设您的对象实例的类型确实位于继承树中的转换类型之下.
这是可取的,因为这使它更快.需要进行的转换和类型检查要少一些.
CType()不如C#cast运算符严格.它会做一些事情,比如将字符串转换为一个整数,你不能用简单的(int)强制转换.它具有与Convert.To___()在C#中调用一样多的能力,其中___是你的演员的目标类型.这是理想的,因为它非常强大,但是这种能力是以性能为代价的 - 它没有DirectCast()或C#的强制转换器那么快,因为完成演员可能需要做很多工作.
一般来说,你应该尽可能地选择DirectCast().
最后,你错过了一个转换操作符:TryCast()这是C#as操作符的直接模拟.
小智 12
随着CType你可以写一些像这样的事情Ctype("string",Integer).但是DirectCast上面的语句会给编译时错误.
Dim a As Integer = DirectCast("1", Integer) 'Gives compiler error
Dim b As Integer = CType("1", Integer) 'Will compile
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77739 次 |
| 最近记录: |