2009-01-22 65 views

回答

2

CType被翻译为一个强制转换,这是一个语言级别的问题。例如,在发射的IL中,不存在例如将object铸造成string的情况。 (注意:如果类型是值类型,它将翻译为unbox指令,但是这是另一回事;运行时根本不区分对FooBar引用类型的引用,为简单起见,I也忽略了InvalidCastException这是由castclass指令完成的)。

Integer.Parse and CInt基本上对源对象(字符串)做了一些处理并将其转换为等效整数。他们做一些事情。 CType只是指示语言编译器关于类型转换。

为了完整起见,IL相当于铸造的是:

  1. castclass如果类型是引用类型。
  2. unbox如果该类型是值类型。

但是,Visual Basic编译器将表达式转换为对Microsoft.VisualBasic.CompilerServices.Conversions方法之一的调用。

0

对于铸造对象,CType()适用于VB,但不适用于c#(除非您参考Microsoft.VisualBasic.dll)。您也可以使用DirectCast()TryCast()

如果您将转换为特定的本机类型,则可以使用Convert类中的方法来执行此操作。 (不一样Parse/TryParse,那些是IsNumeric()CInt()杂种)

例如

Convert.ToInt32() 
Convert.ToString() 
Convert.ToBoolean() 

还有一堆别人为各种类型。

0

你总是可以做这样的事情:

var thisInteger = (Int64)objectToconvert; 

var thisComplicatedObject = (BAL.ComplicatedObject)objectToConvert; 

基本上把你需要转换为在前述括号类型。这种方法并没有带来很好的智能感知,即做ctype()操作,但你可以在下一行看到它。

+0

这是C#等价物,而不是.NET。 – 2009-01-22 15:54:12

相关问题