Type Casting in Visual Basic.NET
gegeven door Molly Pell, Senior systeemanalist
Visual Basic. NET biedt twee opties voor casting.
- CType: werpt of Converteert een type naar een ander type. Als de typen niet overeenkomen, kan dwang worden uitgevoerd.
- DirectCast: werpt een type op een ander type met betere prestaties dan CType, maar voert geen dwang uit als de typen niet overeenkomen.
opmerking: CType omvat alle VB-conversiefuncties. Dit zijn CBool, CByte, CChar, CDATA, CDec, CDbl, CInt, CLng, CObj, CShort, CSng en CStr.
het belangrijkste verschil tussen de twee is dat DirectCast alleen werkt als het opgegeven type en het runtime-type van de expressie hetzelfde zijn. Dit verschil wordt alleen weergegeven bij het converteren van een objecttype naar een waardetype of bij het uitpakken van een waarde.
bijvoorbeeld, de volgende DirectCast operatie zal mislukken omdat het boxed type van het object O geen geheel getal is:
Dim O As Object = 1.5
Dim I As Integer = DirectCast (O, Integer) ‘ veroorzaakt een runtime-fout.
Dim I As Integer = CType (O, Integer) ‘ veroorzaakt geen runtime-fout.
de DirectCast-bewerking in dit voorbeeld zal daarentegen slagen:
Dim O Als Object = 1
Dim I als Integer = DirectCast (O, Integer) ‘ slaagt.
Dim I As Integer = CType (O, Integer) ‘ slaagt, maar is langzamer dan DirectCast
bij het converteren van een object naar een waardetype, of unboxen, heeft de directcast-operator betere prestaties dan de CType-operator. De Visual Basic .NET compiler genereert vier regels IL-code voor DirectCast. Het gebruik van CType zorgt er echter voor dat de Visual Basic. NET-compiler een aanroep genereert naar een conversiemethode die meer dan honderd regels IL-code bevat. Deze methode op zijn beurt roept andere methoden. In prestatiekritische code kan het verschil aanzienlijk zijn. Als dwang echter noodzakelijk is, moet u nog steeds de CType-operatie gebruiken of de dwang handmatig uitvoeren.
bijvoorbeeld:
Dim O Als Object = 1.5
Dim f As Single = DirectCast (O, Single) ‘Cast to the runtime type
Dim I As Integer = CType(f, Integer)’ CType is OK hier, aangezien dit
‘ cast unbox ‘f’
conclusie
wanneer type casting van een objecttype naar een waardetype, of unboxing, moet u eerst bepalen of type dwang noodzakelijk is. Als er geen dwang nodig is (dat wil zeggen dat het boxed type van de waarde hetzelfde is als het type dat is gespecificeerd in de cast-expressie), gebruik dan de directcast-expressie om de prestaties van de toepassing te verhogen.
deze tip en meer gedetecteerd voor u met Total. net Analyzer! Zie FMS. net Analyzer voor meer informatie.