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

Bu en acı verici bir zayıflatıcı buluyorum. Bir eser ve diğeri değil? Bu davranışsal uyuşmazlığın kaynağı nedir? Düşündükçe daha az hayal edebiliyorum ve anlayamama, sık sık kendini beğenmişliğe dönüşüyor.Neden MessageBox.Show yazamıyorum? ("Asdfasdf {0}", i) ;?

cevap

3

Console.Writeline bu aşırı yükleme yaparak sahiptir: bir biçim dizesi ve params array kabul

Özellikle

, an overload. MessageBox.Show aşırı yoktur neden

Bilmiyorum:

İşte oldukça benzer başka bir yöntem bu. Bu yöntem için zaten çok fazla başka aşırı yük olduğu için tahmin ediyorum.

Ama buna string.Format ekleyerek benzer bir etkiyi elde edebilirsiniz:

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

// ... 

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

Show() yönteminin yalnızca düzgün bir aşırı yüklenme yok.

Kolaylık açısından Console.WriteLine'a eklenmiştir, ancak her .NET yönteminin ayrılmaz bir parçası değildir. (MS bunu tanımlanmış nasıl sadece) ama daha sonra her iki durum için "uyumlu" kod yazmak istiyorum EĞER yapabilirsiniz zordur Neden

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

anlatmak için:

, aynı etkiyi elde etmek elle string.Format kullanmak için string.Format kullanmak - örneğin böyle:

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

veya

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

Console.WriteLine, Debug.Print ve benzeri belirli bir yere yazmak için bir dize kabul etmek niyetinde olan yöntemleri şunlardır: Bunun yerine kullanmak gerekir. MessageBox.Show, kullanıcıya bir ileti kutusu modelini gösterecek bir yöntemdir. Ayarlamak için çok daha fazla seçenek var (başlık, düğmeler, vb.), Bu noktada biçimlendirme mantığını kabul etmek mantıklı olmaz.

HTH

0

Ya senin için bu kadar önemliyse, sen böyle kendi sınıfını konum oluşturmak ve zaten bu amaçla sizin için kullanabilirsiniz sorulan:

class myMessageBox 
    { 
     private myMessageBox() 
     { } 

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