Come devo trasmettere in VB.NET?

Sono tutti uguali? In quali circostanze dovrei scegliere ciascuno rispetto agli altri?


EDIT: Suggerimento da NotMyself

  • TryCast (var, String)

Questi sono tutti leggermente diversi e generalmente hanno un utilizzo accettabile.

  • var. ToString () sta per darti la rappresentazione in formato stringa di un object, indipendentemente dal tipo di object. Usalo se var non è già una stringa.
  • CStr (var) è l’operatore di cast stringa VB. Non sono un ragazzo VB, quindi suggerirei di evitarlo, ma in realtà non danneggerebbe nulla. Penso che sia fondamentalmente lo stesso di CType .
  • CType (var, String) convertirà il tipo specificato in una stringa, utilizzando qualsiasi operatore di conversione fornito.
  • DirectCast (var, String) viene utilizzato per eseguire il up-cast di un object in una stringa. Se sai che una variabile object è, in effetti, una stringa, usa questa. Questo è lo stesso di (string)var in C #.
  • TryCast (come menzionato da @ NotMyself ) è come DirectCast , ma restituirà Nothing se la variabile non può essere convertita in una stringa, piuttosto che generare un’eccezione. Questo è lo stesso di var as string in C #. Anche la pagina TryCast su MSDN ha un buon confronto.

Cstr() è compilato in linea per prestazioni migliori.

CType consente i cast tra tipi se è definito un operatore di conversione

ToString() Tra il tipo di base e la stringa genera un’eccezione se la conversione non è ansible.

TryParse() Da String a base typeif ansible altrimenti restituisce false

DirectCast utilizzato se i tipi sono correlati tramite ereditarietà o condividono un’interfaccia comune, genererà un’eccezione se il cast non è ansible, trycast non restituirà nulla in questa istanza

Preferisco la seguente syntax:

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

Si può dire che di solito scrivo codice in C #. 8)

Il motivo per cui preferisco TryCast è che non devi fare i conti con il sovraccarico di casting delle eccezioni. Il tuo cast riesce o la tua variabile è inizializzata su null e tu gestisci di conseguenza.

MSDN sembra indicare che i cast di Cxxx per tipi specifici possono migliorare le prestazioni in VB .NET perché vengono convertiti in codice inline. Per qualche ragione, suggerisce anche DirectCast rispetto a CType in alcuni casi (la documentazione afferma che è quando esiste una relazione di ereditarietà, credo che ciò significhi che la sanità mentale del cast è verificata in fase di compilazione e che le ottimizzazioni possono essere applicate mentre CType usa sempre il Runtime VB.)

Quando scrivo il codice VB. NET, quello che uso dipende da quello che sto facendo. Se si tratta di codice prototipo che ho intenzione di buttare via, io uso quello che mi capita di digitare. Se il codice è serio, cerco di usare un cast di Cxxx. Se uno non esiste, io uso DirectCast se ho una ragionevole convinzione che esista una relazione di ereditarietà. Se è una situazione in cui non ho idea se il cast debba avere successo (input dell’utente -> interi, per esempio), allora uso TryCast in modo da fare qualcosa di più amichevole che lanciare un’eccezione all’utente.

Una cosa che non riesco a scuotere è che tendo ad usare ToString invece di CStr, ma presumibilmente Cstr è più veloce.

Utente Konrad Rudolph sostiene DirectCast () nella domanda di overflow dello stack “Funzioni nascoste di VB.NET” .

Secondo l’esame di certificazione, è consigliabile utilizzare Convert.ToXXX () laddove ansible per conversioni semplici perché ottimizza le prestazioni meglio delle conversioni CXXX.

In una sola volta, ricordo di aver visto lo stato della libreria MSDN per usare CStr () perché era più veloce. Non so se questo è vero però.