2011-11-10 18 views
5
int i = 85; 
Console.WriteLine("My intelligence quotient is {0}", i); // Kosher 
MessageBox.Show("My intelligence quotient is {0}", i); // Not Kosher 

Encuentro esto más penoso y debilitante. Uno funciona y no el otro? ¿Cuál es la fuente de esta incongruencia conductual? Cuanto más lo pienso, menos puedo imaginar, y la falta de comprensión a menudo se convierte en autodesprecio.¿Por qué no puedo escribir MessageBox.Show ("asdfasdf {0}", i) ;?

Respuesta

3

Console.Writeline tiene estas sobrecargas:

En particular, an overload que acepta una cadena de formato y una params array.

Aquí hay otro método que es bastante similar:

No sé qué MessageBox.Show no tiene la sobrecarga. Supongo que es porque ya hay muchas otras sobrecargas para ese método.

Pero se puede conseguir un efecto similar mediante la adición de string.Format a ella:

public void ShowMessageBox(string format, params object[] args) 
{ 
    MessageBox.Show(string.Format(format, args)); 
} 

// ... 

ShowMessageBox("You entered: {0}", someValue); 
9

El método Show() simplemente no tiene una sobrecarga adecuada.

Se ha agregado a Console.WriteLine como cuestión de conveniencia, pero no es parte integral de todos los métodos .NET.

Para lograr mismo efecto, utilice string.Format manualmente:

MessageBox.Show(string.Format("asdfasdf{0}", i)); // Kosher 
1

¿Por qué es difícil decir (que es sólo la forma en MS definió), pero si quieres escribir código "congruentes" para ambos casos a continuación, puede utilizar string.Format - por ejemplo, así:

MessageBox.Show (string.Format ("asdfasdf{0}", i)); 

o

Console.WriteLine (string.Format ("asdfasdf{0}", i)); // although this is unneccesary! 
0

Console.WriteLine, Debug.Print y así sucesivamente son los que se tienen intención de aceptar una cadena a escribirla en un determinado lugar. MessageBox.Show es un método que mostrará un mensaje modal al usuario. Hay muchas más opciones para configurar (como título, botones, etc.), por lo que no tendría sentido aceptar la lógica de formateo en este punto.

HTH

0

O si es tan importante para usted, usted puede crear usted es propia clase así y usar para ese propósito ya Preguntó:

class myMessageBox 
    { 
     private myMessageBox() 
     { } 

     public static void Show(string text,params object[] i) 
     { 
      text = String.Format(text, i); 
      MessageBox.Show(text); 
     } 
    } 
Cuestiones relacionadas