c# - empty - ToString en cadena nula
string.empty c# (8)
Como esta pregunta ocupa un lugar bastante alto en Google para una búsqueda de "c # toString null", me gustaría agregar que el Convert.ToString(null)
devolverá una cadena vacía.
Sin embargo, solo para reafirmar las otras respuestas, puede usar string.Concat("string", null)
en este ejemplo.
¿Por qué el segundo de estos produce una excepción mientras que el primero no lo hace?
string s = null;
MessageBox.Show(s);
MessageBox.Show(s.ToString());
Actualizado: la excepción que puedo entender, la parte desconcertante (para mí) es la razón por la que la primera parte no muestra una excepción. Esto no tiene nada que ver con el Buzón de mensajes, como se ilustra a continuación.
P.ej :
string s = null, msg;
msg = "Message is " + s; //no error
msg = "Message is " + s.ToString(); //error
La primera parte parece estar convirtiendo implícitamente un nulo en una cadena en blanco.
Debido a que MessageBox.Show () se implementa con pinvoke, llama a la función nativa de Windows MessageBox (). Lo que no le importa obtener un valor NULL para el argumento lpText. El lenguaje C # tiene reglas mucho más estrictas para los métodos puros de instancia de .NET (como ToString), siempre emite código para verificar que el objeto no sea nulo. Hay algo de información de fondo sobre esto en esta publicación del blog .
Detrás de las escenas se llama a Concat en su pregunta de seguimiento / actualización, por ejemplo,
string snull = null;
string msg = "hello" + snull;
// is equivalent to the line below and concat handles the null string for you.
string msg = String.Concat("hello", snull);
// second example fails because of the toString on the null object
string msg = String.Concat("hello", snull.ToString());
//String.Format, String.Convert, String.Concat all handle null objects nicely.
Está intentando ejecutar el método ToString () en un nulo. Necesitas un objeto válido para poder ejecutar un método.
La función .show debe tener una comprobación nula y manejarla.
Porque, la segunda llamada está esperando que un objeto de "s" satisfaga una solicitud de método ToString (). por lo tanto, antes de llamar a .Show (), s.ToString () fallaría al intentar llamar a un método.
Curiosamente, mientras .Show () se implementa correctamente, muchos de estos métodos esperan que se pasen instancias no nulas. Por lo general, es cuando se usa un patrón NullObject para que la persona que llama no tenga que lidiar con este tipo de comportamiento.
Probablemente el método Show maneja un valor nulo y simplemente no muestra nada. El segundo uso de s - s.ToString () falla porque no hay un método ToString para ejecutar.
porque no puede llamar al método de instancia ToString()
en una referencia null
.
Y es probable que MessageBox.Show()
esté implementado para ignorar nulo e imprimir un cuadro de mensaje vacío.