Domanda

Considera questi tre esempi:

Esempio A.

string message = "Hello world!";
throw new System.Exception(message);

Esempio b

const string message = "Hello world!";
throw new System.Exception(message);

Esempio C.

throw new System.Exception("Hello world!");

C'è qualche motivo per usarne uno rispetto agli altri? In particolare, non dovrei provare a utilizzare la stringa const ove possibile (supponendo che la stringa non sia mai modificata), e quindi l'esempio B è il migliore? Cosa succede nell'esempio C?

Immagino che sto chiedendo se l'IL emesso da quanto sopra sia identico o diverso e se c'è qualche differenza. Riconosco che la differenza sarà piccola e probabilmente non nulla di cui preoccuparsi; Immagino che questo renda questa domanda accademica.


Modificare. Ecco il IL

IL_0014: ldstr "This is a string"
IL_0019: stloc.0
IL_001a: ldloc.0
IL_001b: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_0020: throw


IL_0033: nop
IL_0034: ldstr "This is a const string"
IL_0039: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_003e: throw

IL_0051: nop
IL_0052: ldstr "This is an inline string."
IL_0057: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_005c: throw

Sembra sostanzialmente identico a me.

È stato utile?

Soluzione 2

Non vi è alcuna differenza in termini di prestazioni, utilizzo della memoria o efficienza della tabella delle stringhe.

L'unico effetto della parola chiave const è generare un errore di tempo di compilazione quando la stringa viene riassociata. Quindi è utile aggiungere const per comunicare la tua intenzione ad altri sviluppatori.

Altri suggerimenti

Dipende dal contesto, davvero. Questo messaggio cambierà mai? Se usi l'opzione A, hai l'opportunità di modificare il valore del messaggio di stringa, con gli altri due che stai stampando una stringa con codice duro - il che va bene, se dice sempre questo

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