代码之家  ›  专栏  ›  技术社区  ›  Caleb Hearth

vb.net中directcast()和ctype()的区别

  •  92
  • Caleb Hearth  · 技术社区  · 14 年前

    我是一个刚刚进入VB.NET的有经验的C/C++/C程序员。我通常使用ctype(和cint、cbool、cstr)进行强制转换,因为它的字符较少,是我接触到的第一种强制转换方法,但我也知道directcast和trycast。

    简单地说,DirectCast和CType之间有什么区别(强制转换的效果、性能等)?我理解Trycast的概念。

    3 回复  |  直到 6 年前
        1
  •  171
  •   Peter Mortensen Mohit    8 年前

    首先要注意的是,vb.net没有与c的直接模拟 (type)instance 铸造机构。我提出这一点是因为在比较两个vb.net操作符(它们是操作符,而不是函数,即使它们具有函数语义)时,将其用作起点是很有用的。

    DirectCast() 比铸造操作员更严格。它只允许您在正在铸造的项目时进行铸造。 已经是 你要铸造的类型。它不会做任何转换。例如,您不能像使用C一样从short强制转换为int# (int) 铸造。但是,如果您的基础 IEnumerable 对象变量实际上是 Array . 当然,您可以从对象强制转换为任何对象,假设对象实例的类型确实位于继承树中强制转换类型的下面。

    这是可取的,因为这使它 更快 . 需要进行的转换和类型检查要少一些。

    CType() 比C铸造操作员更严格。它可以将字符串转换为整数,而不仅仅是简单的 (int) 铸造。它和呼叫一样强大 Convert.To___() 在C中,其中uuuuuu是您的演员的目标类型。这是可取的,因为它非常强大,但这种能力是以性能为代价的,它不如DirectCast()或C的Cast运算符快,因为完成Cast可能需要做很多工作。

    一般来说你应该更喜欢 直接调用() 你可以的时候。

    最后,你错过了一个演员阵容: TryCast() ,这是对C的直接模拟 as 操作员。

        2
  •  10
  •   Unheilig Adonis González    9 年前

    CType 你可以写这样的东西 Ctype("string",Integer) . 但与 DirectCast 上面的语句将给出编译时错误。

     Dim a As Integer = DirectCast("1", Integer) 'Gives compiler error
     Dim b As Integer = CType("1", Integer) 'Will compile
    
        3
  •  0
  •   Palec dr. evil    6 年前

    DirectCast CType .

    例如,这将引发一个错误:

    Sub Main()
        Dim newint As Integer = DirectCast(3345.34, Integer)
        Console.WriteLine(newint)
        Console.ReadLine()
    End Sub
    

    它也将显示在Visual Studio IDE中。

    但是,这不会引发错误:

    Sub Main()
        Dim newint As Integer = CType(3345.34, Integer)
        Console.WriteLine(newint)
        Console.ReadLine()
    End Sub
    
    推荐文章