2010-05-25 27 views

Respuesta

61

No es diferente.

http://msdn.microsoft.com/en-us/library/system.string.empty.aspx:

El valor de este campo es la cadena de longitud cero, "".

En el código de la aplicación, este campo se usa más comúnmente en las asignaciones para inicializar una variable de cadena en una cadena vacía. Para probar si el valor de una cadena es String.Empty, use el método IsNullOrEmpty.

+1

Como dice el duplicado, no es diferente en .NET 2 y por encima. – JoeBilly

5

No hay diferencia. Algunos prefieren usar String.Empty para fines de legibilidad del código. Use el que se sienta cómodo usando.

0

Escuché algunos rumores acerca de que String.Empty es el mismo objeto todo el tiempo, mientras que "" es un objeto nuevo en cada caso, pero no sé exactamente si es correcto.

La razón principal de String.Empty es la legibilidad.

+1

Un nuevo objeto no se crea todo el tiempo. http://en.wikipedia.org/wiki/String_interning –

+0

El compilador los "enlazará" a todos con una cadena vacía. – cyberzed

+0

Leí en algún lado (lo siento, no recuerdo dónde) que la cadena vacía está duplicada una vez en cada ensamblaje. ¡Entonces cada ensamblado que usa '" "' en lugar de 'System.String.Empty' está desperdiciando * memoria valiosa *! ;-) – mcrumley

16

En su mayor parte String.Empty is identical to "" sin embargo por lo general me parece que es más fácil de usar String.IsNullOrEmpty(str) en lugar de tener que comparar str == "" || str == null Además, si usted está en .NET 4.0 String.IsNullOrWhiteSpace(str) cubre incluso más casos, y es, con mucho, el mejor.

+12

Olvida el punto: 'String.IsNullOrEmpty (str)' no tiene nada que ver con 'string.Empty', excepto que la palabra vacía aparece en ambos lugares. –

60

Según Brad Abrams:

Como David implica, hay diferencia entre String.Empty y “” son bastante pequeño, pero hay una diferencia. “” en realidad crea un objeto, se es probable que se retiró de la cadena piscina interno, pero aún así ... mientras String.Empty crea ningún objeto ... así que si que realmente están buscando en última instancia en la eficiencia de la memoria, que sugieren String.Empty. Sin embargo, se debe tener en cuenta la diferencia es tan trivial usted como nunca verlo en su código ...

En cuanto a System.String.Empty o String.Empty o String.Empty ... mi cuidado nivel es bajo ;-)

actualización (03/06/2015):

se ha mencionado en los comentarios que la cita anterior de 2003 ya no es cierto (yo supongo que esto es haciendo referencia a la afirmación de que "" realmente crea un objeto).Así que acabo de crear un par de programas de la consola simples en C# 5 (VS 2013):

class Program 
{ 
    static void Main() 
    { 
     // Outputs "True" 
     Debug.WriteLine(string.IsInterned(string.Empty) != null); 
    } 
} 

class Program 
{ 
    static void Main() 
    { 
     // Outputs "True" 
     Debug.WriteLine(string.IsInterned("") != null); 
    } 
} 

Esto demuestra que tanto "" y String.Empty están ambos internados cuando el código se pone en marcha, lo que significa que para todos los efectos prácticos que son el misma ..

la parte más importante del comentario de Brad es la siguiente:

se debe tener en cuenta la diferencia es tan trivial que se como nunca verlo en su código ...

Esa es la conclusión. Elegir entre "" y String.Empty no es una decisión basada en el rendimiento. Don't waste a lot of time thinking about it. Elija según lo que encuentre más legible o cualquier convención que ya esté siendo utilizada en su proyecto.