Domanda

Ho una funzione che accetta, tra gli altri, un parametro dichiarato come int privateCount.Quando voglio chiamare ToString() su questo parametro, ReSharper lo disattiva e lo contrassegna come chiamata ridondante.Quindi, curioso come sono, rimuovo ToString() e il codice continua a essere creato!

Come può un compilatore C# consentirlo, dove stra è una stringa?

str += privateCount + ...

È stato utile?

Soluzione

L'operatore + per la stringa viene sovraccaricato per chiamare String.Concat passando nel lato sinistro e destro dell'espressione.Così:

string x = "123" + 45;

Viene compilato per:

String.Concat("123", 45);

Poiché String.Concat accetta due oggetti, il lato destro (45) viene racchiuso in un riquadro e su di esso viene chiamato ToString().

Si noti che questo "sovraccarico" non avviene tramite l'overloading dell'operatore nel linguaggio (ovvero non è un metodo denominato op_Addition) ma è gestito dal compilatore.

Altri suggerimenti

Non è solo una cattiva pratica, ma anche meno performante:L'intero deve essere boxato perché String.Concat prevede un oggetto mentre int.ToString() non richiede il boxing.

C# converte automaticamente gli oggetti in stringhe.Considera questa riga di codice:

aString = aString + 23;

Questo è C# valido;si compila in una chiamata a String.Concat(), che accetta due oggetti come argomenti.Questi oggetti vengono automaticamente convertiti in oggetti stringa per te.

La stessa cosa accade quando scrivi:

aString += 23;

Ancora una volta, questo viene compilato nella stessa chiamata a String.Concat();è solo scritto diversamente.

Questa è una cattiva pratica valida, poiché devi pensarci due volte se la variabile è una stringa o un int.Cosa succederebbe se la variabile si chiamasse myInt?

myInt = myInt + 23;

è più leggibile e comprensibile in questa forma?

myInt = mInt + "23";

o anche:

myInt = string.Format("{0}{1}", myInt, 23);

Sappiamo dal codice che si tratta di una stringa e non di un numero intero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top