Por que usar string.Empty sobre “” ao atribuir a um objeto string


13

Estou executando o StyleCop no meu código e uma das recomendações SA1122 é usar string.Empty em vez de "" ao atribuir uma string vazia a um valor.

Minha pergunta é por que isso é considerado uma boa prática. Ou isso é considerado uma boa prática? Eu suponho que não há diferença de compilador entre as duas instruções, então só posso pensar que é uma questão de legibilidade?

SO pergunta e resposta

Jon Skeet resposta à pergunta


5
Tenho certeza de que isso foi solicitado e respondido no Stack Overflow - mas estou tendo problemas para encontrá-lo. Tem a ver com o fato de que ele precisa instanciar um novo objeto de cadeia de caracteres para, ""mas nãostring.Empty
ChrisF

@ Chrish Ahh, não pensou em procurar no estouro de pilha para esse tipo de pergunta. Vou dar uma olhada.
Dreza 19/03/12

1
dup da pergunta no stackoverflow: stackoverflow.com/questions/151472/…
Quentin-starin

@ ChrisF - Foi solicitado no SO. Mais e mais e mais ...
Oded

1
Aqui vamos nós - stackoverflow.com/questions/151472/… - voltando de setembro de 2008. #
ChrisF

Respostas:


12

Um motivo válido é que deixa claro que não é um erro de digitação ou espaço reservado, que você realmente quis usar a string vazia aqui.

Não sei se é considerada "melhor prática".


7

Eu imagino que existem duas razões, uma para facilitar a leitura e duas para um pequeno aumento no desempenho.

Legibilidade é fácil: é muito mais rápido de detectar string.Emptydo que "". Procurar string.Emptytambém geralmente será mais fácil e talvez mais preciso do que procurar o literal. Também esclarece a intenção: você não apenas cometeu um erro de digitação ou esqueceu de terminar alguma coisa, realmente queria uma string vazia.

O motivo do desempenho é devido à internação . Veja, o tempo de execução mantém uma tabela de sequências usadas anteriormente, para que ele possa fazer comparações de seqüências rapidamente sem realmente fazer uma verificação caractere por caractere. string.Emptyjá é uma referência interna para ""onde digitar o literal pode não fornecer a versão internada, causando um pequeno impacto no desempenho.


7
um nitpick, digitando o literal "" sempre fornecerá a mesma versão interna de "", pelo menos desde .Net 2 e superior.
Quentin-starin

Certo, o artigo interno no MSDN é um pouco difícil de seguir nesse ponto. Parece "" e string.Empty devem apontar para a mesma cadeia interna, mas parece indicar algumas diferenças entre as versões de tempo de execução .net. Eu acho que qualquer string literal que aparece várias vezes no código será internada no segundo e outros usos, sim?
CodexArcanum 19/03/12

4
Também devo enfatizar que, quando digo desprezo, quero dizer super-pequeno. "Por causa do desempenho" não é um motivo para passar de uma representação para outra, é apenas uma coisa interessante que vale a pena conhecer sobre o tempo de execução.
CodexArcanum 19/03/12

4
Também deve ser observado que o aspecto desempenho é verdadeiro apenas para compilação. Como ambos são compilados na mesma IL, o desempenho do tempo de execução deve ser idêntico.
lzcd

que aumento de desempenho só seria na compilação
catraca aberração

4

string.Empty ganha em uma caixa realmente de canto, o que pode levar a algum bug mágico e muito difícil de depurar:

Se houver um espaço de largura zero em "".


0

De acordo com alguma documentação que encontrei, tem a ver com o que é emitido pelo compilador.

Uma pesquisa rápida revela: http://stylecop.soyuz5.com/SA1122.html

Por que está arquivado em "Regras de legibilidade" com essa descrição é intrigante.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.