Type Casting I Visual Basic. NET

Levert Av Molly Pell, Senior Systems Analyst

Visual Basic. NET gir to alternativer for støping.

  • CType: Kaster eller konverterer en type til en annen type. Hvis typene ikke samsvarer, kan tvang utføres.
  • DirectCast: Kaster en type til en annen type med bedre ytelse Enn CType, men utfører ikke tvang hvis typene ikke samsvarer.

Merk: CType inkluderer ALLE VB-konverteringsfunksjonene. Disse er CBool, CByte, CChar, Cdate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng og CStr.

hovedforskjellen mellom De to er At DirectCast bare fungerer hvis den angitte typen og kjøretidstypen av uttrykket er de samme. Denne forskjellen vises bare når du konverterer fra en objekttype til en verditype eller opphever innboksing av en verdi.

for eksempel vil Følgende DirectCast-operasjon mislykkes fordi boksen typen av objektet O ikke er et heltall:

Dim O Som Objekt = 1.5

Dim I som Heltall = DirectCast(O, Heltall) ‘ Forårsaker en kjøretidsfeil.

Dim I Som Heltall = CType (O, Heltall) ‘ forårsaker ikke en kjøretidsfeil.

DirectCast-operasjonen i dette eksemplet vil derimot lykkes:

Dim O Som Objekt = 1

Dim I Som Heltall = DirectCast(O, Heltall) ‘ Lykkes.

Dim I As Integer = CType(O, Integer) ‘ Lykkes, Men er tregere Enn DirectCast

Når du konverterer Fra et objekt til en verditype Eller unboxing, Har DirectCast-operatøren bedre ytelse enn ctype-operatøren. Visual Basic .NET compiler genererer fire linjer MED IL-kode For DirectCast. BRUK Av CType fører Imidlertid Til At Visual Basic. NET-kompilatoren genererer et kall til en konverteringsmetode som er godt over hundre LINJER MED IL-kode. Denne metoden kaller igjen andre metoder. I ytelseskritisk kode kan forskjellen være betydelig. Hvis tvang er nodvendig, ma du likevel bruke CType-operasjonen, eller utfore tvang manuelt.

for eksempel:

Dim O Som Objekt = 1.5

Dim f Som Singel = DirectCast(O, Singel) ‘Cast til kjøretidstypen

Dim Jeg Som Heltall = CType(f, Heltall)’ CType ER OK her, siden dette
‘cast ikke unbox ‘f’

Konklusjon

når type casting fra en objekttype til en verditype, eller unboxing, bør du først finne ut om type tvang er nødvendig. Hvis ingen tvang er nødvendig (dvs.boksen typen av verdien er den samme som den som er angitt i cast uttrykk), bruker DirectCast uttrykk for å øke programytelsen.

dette tipset og mer oppdaget for Deg Med Total. NET Analyzer! Se FMS. NET Analyzer for mer informasjon.