Típus Casting Visual Basic. Net

által biztosított Molly Pell, Senior Systems Analyst

Visual Basic.Net két lehetőséget casting.

  • CType: az egyik típust egy másik típussá alakítja. Ha a típusok nem egyeznek, kényszerítés végezhető.
  • DirectCast: az egyik típust egy másik típusra vetíti, jobb teljesítménnyel, mint a CType, de nem hajt végre kényszerítést, ha a típusok nem egyeznek.

Megjegyzés: A CType tartalmazza az összes VB konverziós funkciót. Ezek a következők: CBool, CByte, Cchar, CDate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng és CStr.

a fő különbség a kettő között az, hogy a DirectCast csak akkor működik, ha a megadott típus és a kifejezés futásidejű típusa megegyezik. Ez a különbség csak akkor jelenik meg, ha objektumtípusról értéktípusra konvertál, vagy kibontja az értéket.

például a következő DirectCast művelet sikertelen lesz, mert az O objektum dobozos típusa nem egész szám:

Dim O as Object = 1.5

Dim I As Integer = DirectCast(O, Integer) ‘ futásidejű hibát okoz.

Dim I As Integer = CType(O, Integer) ‘ nem okoz futási hibát.

ezzel szemben a DirectCast művelet ebben a példában sikeres lesz:

Dim O as Object = 1

Dim I As Integer = DirectCast(O, Integer) ‘ sikeres.

Dim I As Integer = CType(O, Integer) ‘ sikeres, de lassabb, mint a DirectCast

amikor objektumról értéktípusra konvertál, vagy kibontja, a DirectCast operátor jobb teljesítményt nyújt, mint a CType operátor. A Visual Basic .NET fordító generál négy sor IL kódot DirectCast. A CType használatával azonban a Visual Basic. Net fordító hívást generál egy olyan konverziós módszerre, amely jóval meghaladja az IL kód száz sorát. Ez a módszer viszont más módszereket hív. A teljesítménykritikus kódban a különbség jelentős lehet. Ha azonban kényszerítésre van szükség, akkor is használnia kell a CType műveletet, vagy manuálisan kell végrehajtania a kényszerítést.

például:

Dim O mint objektum = 1.5

Dim f As Single = DirectCast (O, Single) ‘Cast a futásidejű típushoz

Dim I As Integer = CType (f, Integer)’ a CType itt rendben van, mivel ez a
‘cast nem unbox ‘f’

következtetés

ha objektumtípusról értéktípusra vagy kicsomagolásra ír, akkor először meg kell határoznia, hogy szükséges-e a típus kényszerítése. Ha nincs szükség kényszerítésre (azaz az érték dobozos típusa megegyezik a cast kifejezésben megadott típussal), használja a DirectCast kifejezést az alkalmazás teljesítményének növeléséhez.

ez a tipp és több észlelt az Ön számára Total. net Analyzer! Lásd FMS. Net Analyzer További információ.