none
VB.NET 2005/2008的DirectCast函数有一个Bug,和大家分享 RRS feed

  • 常规讨论

  • 前一阵子在英文的论坛上看到一个帖子,说在.NET 2.0下面写VB.NET程序,使用DirectCast函数可能会导致运行时的崩溃。

    我帮助原帖楼主调查之后,发现这是VB.NET 2005/2008里面的一个Bug。所以就转发到这里和大家分享这个信息,万一大家遇到同样的问题可以少走弯路。

    总结一下那个帖子所说的问题就是,当你试图用DirectCast函数把一个Double类型转换成Double类型的时候(对的,听起来毫无必要,但是有时候你可能无意识做了这件事,比如原帖楼主把COM组件里面的某个属性转Double,其实本来就是Double,但他自己不知道),程序在运行时会抛出'System.AccessViolationException'导致崩溃。

    这是一个已知的Bug,并且已经在.NET 4.0里面得到了修复。在.NET 4.0里面,你无法使用DirectCast做同类型的转换(即Double转换成Double等),编译器会报错。

    对于仍然在使用老版本的开发者,如果你无法确定被转换的数据类型,可以使用别的转换函数,比如CDbl来代替DirectCast。

    原帖地址:
    http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/d4e293fa-e6d6-4925-8303-bf83537ce99d

    希望这个帖子对大家多少有所帮助。


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    If you have any feedback, please tell us.

    The All-In-One Code Framework Project
    My Blog (in Simplified Chinese)
    2010年11月15日 6:49
    版主

全部回复

  • 谢谢分享~~~
    Raymond Tang (Microsoft C# MVP)
    Denn Ich Gehoer nur mir
    .NET交流群71840452
    微软中文论坛同城社区成都QQ群:74268428
    My Chinese Blog
    Chengdu,Sichuan Province,China
    2010年11月15日 7:40
    版主