Pregunta

Considere estos tres ejemplos:

Ejemplo A

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

Ejemplo B

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

Ejemplo C

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

¿Hay alguna razón para usar uno sobre los demás? Específicamente, ¿no debería intentar usar la cadena const siempre que sea posible (suponiendo que la cadena nunca se modifique) y, por lo tanto, el ejemplo B es mejor? ¿Qué sucede en el ejemplo C?

Supongo que pregunto si la IL emitida por lo anterior es idéntica o diferente, y si hay alguna diferencia. Reconozco que la diferencia será pequeña y probablemente no nada de qué preocuparse; Supongo que eso hace de esta una pregunta académica.


Editar. Aquí está el 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

Me parece sustancialmente idéntico.

¿Fue útil?

Solución 2

No hay diferencia en términos de rendimiento, uso de memoria o eficiencia de la tabla de cadenas.

El único efecto de la palabra clave const es generar un error de tiempo de compilación cuando se reasigna la cadena. Por lo tanto, es útil agregar const para comunicar su intención a otros desarrolladores.

Otros consejos

Depende del contexto, de verdad. ¿Este mensaje va a cambiar alguna vez? Si usa la opción A, tiene la oportunidad de modificar el valor del mensaje de cadena, con los otros dos está imprimiendo una cadena codificada, lo cual está bien, si siempre va a decir eso

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top