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

私はこの最も悲惨なものを衰弱させることがわかりました。 1つは動作し、もう1つは動作しませんか?この行動不一致の原因は何ですか?私はそれについてもっと考えるほど私は想像がつきにくく、理解しないことはしばしば自己嫌悪に変わります。なぜMessageBox.Show( "asdfasdf {0}"、i);?を書くことができません。

答えて

3

Console.Writelineこれらのオーバーロードがあります特に

an overload書式文字列とparams arrayを受け入れています。

ここでは非常に似ている別の方法です:

MessageBox.Showが過負荷を持っていない理由を私は知りません。私はそれがすでにそのメソッドのために他の多くの過負荷があるためだと思います。

しかし、あなたはそれにstring.Formatを追加することにより、同様の効果を得ることができます。

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

// ... 

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

Show()メソッドには、適切なオーバーロードがありません。

便宜上、Console.WriteLineに追加されましたが、すべての.NETメソッドの不可欠な部分ではありません。同じ効果を達成するために

、手動string.Formatを使用します。

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

はなぜ言うのは難しいです(それはMSがそれを定義しただけの方法です)しかし、あなたは両方のケースのための「合同」のコードを書きたいならば、あなたのことができstring.Formatを使う - たとえば、次のように:

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

または

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

WriteLine()メソッドのオーバーロードはWriteLine(string format, Object arg0)で、MessageBox.Show()のオーバーロードはありません。 Debug.Print

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

Console.WriteLineというように、特定の場所にそれを書くための文字列を受け入れるつもりされているメソッドです。その代わりに、使用する必要があります。 MessageBox.Showは、ユーザーにメッセージボックスモーダルを表示する方法です。 (タイトル、ボタンなどのように)設定するオプションがたくさんあるので、この時点でフォーマットロジックを受け入れることは意味がありません。

HTH

0

それともそれはあなたのために非常に重要であるならば、あなたはすでにあなたをあなたがそのような独自のクラスだ作成し、その目的のために使用することができます質問:

class myMessageBox 
    { 
     private myMessageBox() 
     { } 

     public static void Show(string text,params object[] i) 
     { 
      text = String.Format(text, i); 
      MessageBox.Show(text); 
     } 
    } 
関連する問題