Differenza tra "String" e "string" in .NET e qual è la migliore?


15

In .NET Framework, almeno nel linguaggio C #, abbiamo due "versioni" del tipo stringa:

  • "corda"
  • "Corda"

Sembra che siano intercambiabili, ma lo sono davvero? Se non sono intercambiabili, è generalmente meglio utilizzare l'uno anziché l'altro e in quali circostanze?


1
Simile a questa domanda: stackoverflow.com/q/6000517/6504
Agent_9191

2
Stilisticamente, tendo a usare la versione minuscola quando mi riferisco al tipo e la versione maiuscola quando chiamo un metodo statico di System.String.
Joel Mueller,


2
stringnon esiste in .net, esiste solo in C #.
CodesInChaos,

1
Anche se questo potrebbe essere un po 'più adatto per Stack Overflow, non penso che sia completamente fuori tema per i programmatori e poiché Stack Overflow ha già almeno un duplicato, non avrebbe molto senso migrare questo. Quindi, interrompi la segnalazione / chiudi il voto per migrare, se ritieni che debba essere chiuso, va bene, ma dovrebbe essere chiuso non migrato.
yannis,

Risposte:


30

Bene secondo il MSDN

string è un alias per String in .NET Framework.

Dove "String" è in effetti System.String .

Direi che sono intercambiabili e non c'è differenza quando e dove dovresti usare l'uno o l'altro.

Sarebbe meglio essere coerenti con quello che hai usato però.


per qualche motivo avevo in mente che String era un wrapper di classe attorno a una stringa tipizzata di valore e questo porta all'idea del pugilato ... sbaglio del tutto qui?
Aaron Anodide l'

1
@Gabriel No, String(e quindi stringper alias) sono tipi di riferimento.
Kris Harper,

@Gabriel: Java non lo fa con cose come byte vs Byte?
whatsisname

Lo stesso vale anche per Double vs double e altri tipi di dati?
Gavin Coates,

1
@AaronAnodide Credo che sia una convenzione di Java, che probabilmente è dove ne hai sentito parlare.
KChaloux,

20

Come sottolineato, sono la stessa cosa ed stringè solo un alias String.

Per quello che vale, uso stringper dichiarare i tipi: variabili, proprietà, valori di ritorno e parametri. Ciò è coerente con l'uso di altri tipi di sistemi - int, bool, varecc (anche se Int32e Booleansono anche corretta).

Uso Stringquando utilizzo i metodi statici sulla classe String, come String.Split()o String.IsNullOrEmpty(). Ritengo che ciò abbia più senso perché i metodi appartengono a una classe ed è coerente con il modo in cui utilizzo altri metodi statici.


Usiamo questa convenzione anche sul lavoro e mi piace. Il mio cervello stabilisce automaticamente la connessione.
SBI

4

Suggerirei di usare lettere minuscole string. Le lettere maiuscole Stringuseranno la prima classe denominata String che trova negli spazi dei nomi importati ... che è generalmente System.String. È possibile invece utilizzare la propria classe String.


3
Se si hanno due diversi tipi importati con lo stesso nome e si utilizza quel nome senza qualifica dello spazio dei nomi, verrà visualizzato un errore.
svick

È possibile ingannare il Stringlavoro, non è mai possibile imbrogliare string.
Bryan Boettcher,

Tuttavia, non penso che sia un motivo sufficiente per usarlo string.
svick

5
In che modo "si potrebbe spezzare" vs. "non si romperà mai" con tutto il resto identico non è una ragione sufficiente?
Bryan Boettcher,

4

string è una parola chiave C # che è semplicemente un alias per System.String

..ma poichè è una parola chiave, il tuo editor / IDE di colorazione della sintassi lo mostrerà nel colore della parola chiave, uguale a int, double, if, else, ecc. Stilisticamente, potresti preferire usare la parola chiave piuttosto che il System.Stringtipo (o subito Stringdopo hai finitousing System; ).

Questo è un punto nicchia però, come anche se bool, char, int, doublee stringsono tutti alias per parole chiave per tipi di sistema, stringè un dispari-one-out in quanto è un tipo di riferimento e gli altri sono tipi di valore.


4
objectè anche un alias di parole chiave per un tipo di riferimento
nikie il

Oh sì, ho dimenticato tutto quello - grazie per il promemoria.
JBR Wilkinson,

2

string è solo un alias per String , alla fine sono gli stessi.

È possibile utilizzare se si preferisce, anche se io di solito uso stringquando sto pensando di usare molto più come un tipo di dati primitivi (simile a int, floato bool) e Stringquando sto pensando di usarlo come un oggetto / classe. Per esempio:

string foo = "   ";
if (String.isNullOrWhitespace(foo)) 
{
    // ...
}

Nel caso sopra, sto pensando di usare foosemplicemente per memorizzare un po 'di testo (efficacemente come una primitiva), quindi uso string; tuttavia, quando chiamo String.isNullOrWhitespace(string)lo uso String. Faccio questo, perché generalmente la prima lettera dei nomi di classe è in maiuscolo ( String) mentre la prima lettera di primitivi (come int) non lo sono.


-2

String viene utilizzato con lo spazio dei nomi System.String, string viene utilizzata la specifica del compilatore C #, inoltre System.String è il valore del tipo di riferimento. Si preferisce trattare oggetti di sistema, stringa solo a scopo letterale. Sistema e sistema funzionano entrambi allo stesso modo.

string TC = new System.String('/', 5);

La stringa viene utilizzata anche per scopi di confronto, uguali e di altro tipo.


4
questo non sembra offrire nulla di sostanziale rispetto alle precedenti 6 risposte
moscerino del
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.