Hoe moet ik in VB.NET worden gegoten?

zijn allemaal gelijk? Onder welke omstandigheden moet ik elk over de anderen kiezen?

  • VAR.TOSTRING ()

  • CSTR (VAR)

  • CTYPE (VAR, STRING)

  • DIREFERCAST (VAR, STRING)


Bewerken: suggestie van notmyself

  • trycast (var, string)

Antwoord 1, Autoriteit 100%

die zijn allemaal iets anders en hebben in het algemeen een acceptabel gebruik.

  • var.ToString()Gaat u de reeksvertegenwoordiging van een object, ongeacht welk type het is. Gebruik dit als vargeen reeks is.
  • CStr(var)is de VB String Cast-operator. Ik ben geen VB-kerel, dus ik zou willen voorstellen om het te vermijden, maar het gaat niets pijn doen. Ik denk dat het in principe hetzelfde is als CType.
  • CType(var, String)Converteert het gegeven type in een tekenreeks, met behulp van een verstrekte conversie-exploitanten.
  • DirectCast(var, String)wordt gebruikt om een ​​object op te zetten in een touw. Als u weet dat een objectvariabele in feite een tekenreeks is, gebruik dit dan. Dit is hetzelfde als (string)varin c #.
  • trycast(zoals vermeld door @NotMyself) is als DirectCast, maar het retourneert Nothingals de variabele niet kan worden omgezet in een tekenreeks, in plaats van een uitzondering te genereren. Dit is hetzelfde als var as stringin C#. De trycast-pagina op MSDN heeft ook een goede vergelijking.

Antwoord 2, autoriteit 8%

Cstr()is inline gecompileerd voor betere prestaties.

CTypemaakt casts tussen typen mogelijk als er een conversie-operator is gedefinieerd

ToString()Tussen basistype en tekenreeks wordt een uitzondering gegenereerd als conversie niet mogelijk is.

TryParse()Van tekenreeks naar basis typeifmogelijk, anders wordt false geretourneerd

DirectCastgebruikt als de typen verwant zijn via overerving of een gemeenschappelijke interface delen, zal een uitzondering genereren als de cast niet mogelijk is, trycastzal in dit geval niets teruggeven


Antwoord 3, autoriteit 5%

MSDNlijkt erop te wijzen dat de Cxxx-casts voor specifieke typen kunnen de prestaties in VB .NET verbeteren omdat ze worden geconverteerd naar inline-code. Om de een of andere reden suggereert het ook DirectCastin plaats van CType in bepaalde gevallen (In de documentatie staat dat er sprake is van een overervingsrelatie; ik geloof dat dit betekent dat de gezondheid van de cast wordt gecontroleerd tijdens het compileren en optimalisaties kunnen worden toegepast terwijl CType altijd de VB-runtime gebruikt.)

Wanneer ik VB .NET-code aan het schrijven, wat ik gebruik, hangt af van wat ik aan het doen ben. Als het een prototype-code is, ga ik weggooien, ik gebruik wat ik toevallig typt. Als het code is waar ik serieus over ben, probeer ik een CXXX-cast te gebruiken. Als iemand niet bestaat, gebruik ik DirectCast als ik een redelijke overtuiging heb dat er een erfenisrelatie is. Als het een situatie is waarin ik geen idee heb als de cast zou moeten slagen (gebruikerinvoer – & GT; integers, bijvoorbeeld), dan gebruik ik TryCast om iets vriendelijker te doen dan een uitzondering bij de gebruiker.

Eén ding dat ik niet kan schudden, is dat ik de neiging heb om te gebruiken in plaats van CSTR, maar zogenaamd CSTR is sneller.


Antwoord 4, Autoriteit 5%

Ik geef de voorkeur aan de volgende syntaxis:

Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then

HAH U KUNT VERTELLEN Ik schrijf typisch code in C #. 8)

De reden waarom ik liever trycast is, hoeft u niet te rotzooien met de overhead van gietende uitzonderingen. Uw cast slaagt of uw variabele wordt geïnitialiseerd naar nul en u behandelt dat dienovereenkomstig.


Antwoord 5, Autoriteit 2%

Gebruiker Konrad Rudolph pleiten Voor DirectCast () in Stack Overflow Vraag” Verborgen kenmerken van VB.NET “.


Antwoord 6

Volgens het certificeringsexamen moet u convert.toxxx () gebruiken wanneer mogelijk voor eenvoudige conversies omdat deze prestaties beter optimaliseert dan CXXX-conversies.


Antwoord 7

Ik herinner me in één keer dat ik de MSDN-bibliotheekstatus zie om CSTR () te gebruiken omdat het sneller was. Ik weet niet of dit waar is.

Other episodes