Son diferentes como otros ya respondieron.
static void Main(string[] args)
{
string s1 = null;
string s2 = string.Empty;
string s3 = "";
Console.WriteLine(s1 == s2);
Console.WriteLine(s1 == s3);
Console.WriteLine(s2 == s3);
}
results:
false - since null is different from string.empty
false - since null is different from ""
true - since "" is same as string.empty
El problema con la administración de cadenas vacías frente a cadenas nulas se está convirtiendo en un problema cuando necesita conservarlo en un archivo plano o transferirlo a través de comunicaciones, por lo que creo que podría ser útil para otros que visitan esta página para dar una buena solución a ese problema en particular.
Con el fin de guardar cadenas en un archivo o comunicaciones:
probablemente desee convertir la cadena en bytes.
Una buena práctica que recomiendo es agregar 2 segmentos de bytes de encabezado a su cadena convertida.
segmento 1: metainformación que se almacena en 1 byte y describe la longitud del siguiente segmento.
segmento 2: contiene la longitud de la cadena que se va a guardar.
ejemplo:
cadena "abcd" - para simplificar la convertiré usando un codificador ASCII y obtendré {65,66,67,68}.
calcular el segmento 2 producirá 4, por lo que 4 bytes son la longitud de la cadena convertida.
calcular el segmento 1 dará como resultado 1, ya que solo se usó 1 byte para contener la información de longitud de la información de cadena convertida (que era 4, es decir, si era 260 obtendría 2)
La nueva franja de bytes ahora será {1,4,65,66,67,68} que se puede guardar en un archivo.
El beneficio con respecto al tema es que si tuviera una cadena vacía para guardar, obtendría de la conversión una matriz vacía de bytes con una longitud de 0 y, después de calcular los segmentos, terminaré teniendo {1,0} que puede ser guardado y luego cargado e interpretado de nuevo en una cadena vacía. Por otro lado, si tuviera un valor nulo en mi cadena, terminaría teniendo solo {0} como mi matriz de bytes para guardar y, nuevamente, cuando se cargue, se puede volver a interpretar como nulo.
Hay más beneficios, como saber cuál es el tamaño que se cargará o acumulará si se mueven varias cuerdas.
Volviendo al tema, será ... bueno, contaminará la pila, ya que los mismos principios descritos están siendo utilizados por cualquier sistema para diferenciar nulos de vacíos ... así que sí, cadena. Vacío toma más memoria que nulo, aunque yo no lo haría llámalo contaminación .. es sólo 1 byte más.