Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] dudas con string.Empty

Estas en el tema de dudas con string.Empty en el foro de .NET en Foros del Web. vengo del mundo java con netbeans y recien empiezo en el mundo de c# con visual studio community 2015 y pues mi duda e inquietud ...
  #1 (permalink)  
Antiguo 22/09/2015, 14:42
 
Fecha de Ingreso: febrero-2015
Ubicación: D.F.
Mensajes: 52
Antigüedad: 9 años, 2 meses
Puntos: 0
Información dudas con string.Empty

vengo del mundo java con netbeans y recien empiezo en el mundo de c# con visual studio community 2015 y pues mi duda e inquietud es con respecto a las variables string, en especifico al momento de inicializarla en un contructor:

Código:
string nombre1 = "";
string nombre2 = null;
string nombre3 = string.Empty;
siempre he ocupado el "" para limpiar campos y las variables string, el null se que es valor por default para objetos string si estso no fueron inicializados (segun yo se que es asi en java pero en c# no lo se) pero luego esta el string.Empty; que segun por lo que investige y por la description que me ofrece el IDE se usa para representar cadenas vacias, entonces:

¿los datos asignados para las 3 variables son equivalentes o son totalmente diferentes?

Probe imprimiendolas en consola pero no se muestra el valor asignado (se que para "" y null esto es asi pero supongo que para string.Empty esto tambien es asi);
__________________
Mientras unos tienen el poder del dinero, otros tienen la luz del conocimiento y algunos más tienen la perseverancia del ingenio.
  #2 (permalink)  
Antiguo 23/09/2015, 00:52
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: dudas con string.Empty

String.Empty es una especie de "constante de .NET". A ti te tiene que dar igual como internamente se representa que una cadena está vacía, solo te interesa vaciarla o comprobar si ya lo está. Por eso lo más recomendable es usar String.Empty y evitar cosas más "esotéricas" como igualarlo a "" o a null.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 23/09/2015, 07:06
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 3 meses
Puntos: 52
Respuesta: dudas con string.Empty

@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 original
  1. var cadena1 = "";
  2. var cadena2 = "Hola Mundo!";
  3. var cadena3 = string.Empty;
  4. string cadena4 = null;
  5.  
  6. Console.WriteLine(string.IsNullOrEmpty(cadena1)); //Imprime "True"
  7. Console.WriteLine(string.IsNullOrEmpty(cadena2)); //Imprime "False"
  8. Console.WriteLine(string.IsNullOrEmpty(cadena3)); //Imprime "True"
  9. 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 original
  1. Console.WriteLine(cadena1 == cadena3); //Imprime "True" porque "" es igual a string.Empty
  2. 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 original
  1. public static class Extensiones
  2. {
  3.     public static bool IsNullOrEmpty(this string str)
  4.     {
  5.          return string.IsNullOrEmpty(str);
  6.     }
  7. }

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 original
  1. Console.WriteLine(cadena1.IsNullOrEmpty()); //Imprime "True"
  2. Console.WriteLine(cadena2.IsNullOrEmpty()); //Imprime "False"
  3. Console.WriteLine(cadena3.IsNullOrEmpty()); //Imprime "True"
  4. 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.

Última edición por agleiva; 23/09/2015 a las 07:13
  #4 (permalink)  
Antiguo 23/09/2015, 07:37
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: dudas con string.Empty

Para mi usar "" para comparar o setear el valor de una cadena vacía es lo mismo que usar un valor mágico o un magic number. Y usar "constantes" en lugar de los valores hard-coded es uno de los refactorings que recomienda Martin Fowler para mejorar la legibilidad del código.
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 23/09/2015, 07:44
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 3 meses
Puntos: 52
Respuesta: dudas con string.Empty

Cita:
Iniciado por Malenko Ver Mensaje
Para mi usar "" para comparar o setear el valor de una cadena vacía es lo mismo que usar un valor mágico o un magic number. Y usar "constantes" en lugar de los valores hard-coded es uno de los refactorings que recomienda Martin Fowler para mejorar la legibilidad del código.
Es verdad, pero también es verdad que usar string.Empty es más largo, y no se puede usar en todos lados (por ejemplo en atributos [DisplayName(string.Empty)] no compila, y [DisplayName("")] si), y para mantener consistencia algunos recomiendan usar "" en todos lados.

En cualquier caso como dije arriba, es cuestión de opiniones y gustos.
  #6 (permalink)  
Antiguo 23/09/2015, 09:42
 
Fecha de Ingreso: febrero-2015
Ubicación: D.F.
Mensajes: 52
Antigüedad: 9 años, 2 meses
Puntos: 0
Información Respuesta: dudas con string.Empty

Cita:
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.
eso es cierto, ya que estaba viendo lo de las fechas y hora y si que es mas comodo y facil jejejeje.

Cita:
Adicionalmente, C# permite sobrecarga de operadores, con lo cuál tranquilamente se pueden usar operadores como == para comparar todo tipo de objetos.
esto no sabia que se pudiera usar para string, ya que en java siempre hacia uso de .equals().

Muchas gracias a ambos por la ayuda. Veo que aun me falta mucho por recorrer.
__________________
Mientras unos tienen el poder del dinero, otros tienen la luz del conocimiento y algunos más tienen la perseverancia del ingenio.

Etiquetas: c#, java, programacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:00.