@Malenko: Permitime disentir con tu afirmación.
Según Jon Skeet (nada menos), string.Empty y "" son idénticos y queda a gusto del programador usar uno u otro:
http://stackoverflow.com/a/263257/643085
Lo más recomendable en este caso es usar lo que a uno le parezca mejor
misforosvictor08: Lo importante es que sepas que "" y string.Empty son exactamente iguales. No así null, que es la ausencia de un objeto.
Sin embargo, hay casos en donde string.Empty no se permite, ya que no es una constante sino un campo público, y tenés que usar "" si o si (por ejemplo en un case de un switch).
Adicionalmente, como venís de java, vas a encontrar que C# es un lenguaje infinitamente mejor que java, y tiene muchas ventajas para escribir código de manera mucho más comoda. Por ejemplo, en C# existe el método string.IsNullOrEmpty() que te permite ver rápidamente si una cadena es null o vacía:
Código C#:
Ver originalvar cadena1 = "";
var cadena2 = "Hola Mundo!";
var cadena3 = string.Empty;
string cadena4 = null;
Console.WriteLine(string.IsNullOrEmpty(cadena1)); //Imprime "True"
Console.WriteLine(string.IsNullOrEmpty(cadena2)); //Imprime "False"
Console.WriteLine(string.IsNullOrEmpty(cadena3)); //Imprime "True"
Console.WriteLine(string.IsNullOrEmpty(cadena4)); //Imprime "True"
Adicionalmente, C# permite sobrecarga de operadores, con lo cuál tranquilamente se pueden usar operadores como == para comparar todo tipo de objetos.
Código C#:
Ver originalConsole.WriteLine(cadena1 == cadena3); //Imprime "True" porque "" es igual a string.Empty
Console.WriteLine(cadena1 == cadena4); //Imprime "False" porque "" NO es igual a null
Además de toodo esto, C# permite definir extension methods para usar sobre clases existentes, sin modificar la clase (cosa que no se puede hacer en java de ninguna manera).
Por ejemplo, puedo definir una extensión llamada IsNullOrEmpty() para la clase string, de la siguiente forma:
Código C#:
Ver originalpublic static class Extensiones
{
public static bool IsNullOrEmpty(this string str)
{
return string.IsNullOrEmpty(str);
}
}
Esta extensión, en lugar de usarla como un método estático, la usás como si fuera parte de la misma clase:
Código C#:
Ver originalConsole.WriteLine(cadena1.IsNullOrEmpty()); //Imprime "True"
Console.WriteLine(cadena2.IsNullOrEmpty()); //Imprime "False"
Console.WriteLine(cadena3.IsNullOrEmpty()); //Imprime "True"
Console.WriteLine(cadena4.IsNullOrEmpty()); //Imprime "True"
Fijate estoy usando IsNullOrEmpty() como si fuera parte de la clase string. Esto hace que el código sea más breve y más legible.