Pergunta

Considere estes três exemplos:

Exemplo a

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

Exemplo b

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

Exemplo c

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

Existe algum motivo para usar um sobre os outros? Especificamente, não devo tentar usar a String const sempre que possível (assumindo que a string nunca seja modificada) e, portanto, o Exemplo B é o melhor? O que acontece no Exemplo C?

Acho que estou perguntando se o IL emitido pelo exposto acima é idêntico ou diferente e se há alguma diferença. Reconheço que a diferença será pequena e provavelmente não se preocupe; Eu acho que isso faz disso uma pergunta acadêmica.


Editar. Aqui está o 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

Parece substancialmente idêntico a mim.

Foi útil?

Solução 2

Não há diferença em termos de desempenho, uso da memória ou eficiência da tabela de string.

O único efeito da palavra-chave const é gerar um erro de tempo de compilação quando a string é assinada novamente. Portanto, é útil adicionar const para comunicar sua intenção a outros desenvolvedores.

Outras dicas

Depende do contexto, realmente. Esta mensagem vai mudar? Se você usa a opção A, terá a oportunidade de modificar o valor da mensagem da string, com os outros dois que você está imprimindo uma string de codificação dura - o que é bom, se sempre vai dizer exatamente isso

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top