2012-02-06 10 views
0

サンプルウィンフォームアプリケーションをコンソールアプリケーションに変換しようとしましたが、メッセージフォーマットに変換しようとしているときに突然止まってしまいました。ここで C#を使用したメッセージフォーマット

があるWinフォームから元のコードの下

private void PutMessage(StringBuilder message, string mediaType, string filename) 
{ 

    message.AppendFormat(messageFormat, "FileSize", videoInterrogator.GetFileSize(), Environment.NewLine); 
    message.AppendFormat(messageFormat, "Duration", videoInterrogator.GetDuration(), Environment.NewLine); 

} 

アム私のコンソールアプリケーション

アムFTPDownloadメソッドからメソッドを呼び出すことで同じことをやろうとそう

PutMessage(file, message); 


private void PutMessage(string filename, StringBuilder message) 
{ 
    VideoInterrogator videoInterrogator = new VideoInterrogator(); 
    videoInterrogator.LoadFile(filename); 
    message.AppendFormat(format, "FileSize", videoInterrogator.GetFileSize(), Environment.NewLine); 
    message.AppendFormat(format, "Duration", videoInterrogator.GetDuration(), Environment.NewLine); 

} 
のようなコードを見て

どのように私はこのメソッドを呼び出して、ファイル名を渡して、値を返すことができますか?「フォーマット」で例外がスローされます。あなたは、変数formatを逃している

var message = new StringBuilder(); 
var filename = "file.xyz"; 
PutMessage(filename, message); 
Console.WriteLine(message); 
+0

メソッドのコンテキストをさらに提供するためにコードをいくつか追加すると便利です。 'format'はどこに宣言されていますか? –

答えて

2

:あなたは任意のメソッドを呼び出したいよう

+0

大助けをしてくれてありがとう、馬鹿です、コードブロックでこの部分に気付かなかったpublic format messageFormat { get { "{0}:{1} {2}"を返します。 } } – Usher

+0

ありがとうございます。 – Usher

+0

@ユーザ:プロパティは、大文字で始まる必要があります。 – siride

1

ちょうどそれを呼び出します。 WinFormsコードのフィールドであったに違いありません。ローカル変数としてメソッドに追加するか、PutMessageを含むクラスのフィールドに追加します。

編集:私は実際の問題が何であるか分かりません。それが欠落している変数か、書式文字列に3つ以上の中括弧引数がありますか?

+0

ありがとうAndrew、@形式での例外のスロー、現在のコンテキストに存在しない形式をスローします。 – Usher

+0

PutMessageの別のパラメータとしてformatを追加するか、クラスのメンバにする必要があります。 –

1

使用しているAppendFormatメソッドの署名で判断すると、フォーマットに使用されている文字列がありません。 MSDNリンク上によれば

この方法は、そのテキスト表現 にオブジェクトの値を変換し、現在のStringBuilderオブジェクトにその表現を埋め込むために、.NET Frameworkの の複合書式設定機能を使用します。

フォーマットパラメータはテキストのゼロまたはそれ以上のランから成るは は、ARG3を通して このメソッドのパラメータリスト内のオブジェクトをARG0に対応する、フォーマットアイテムと呼ばれる、ゼロまたはそれ以上のインデックス付きプレースホルダ を混在しました。書式設定プロセスは、各書式項目を対応するオブジェクトの文字列表現 に置き換えます。次のように フォーマット項目の構文は次のとおりです

{指数[長さ] [:formatStringの]}角括弧内

要素はオプションです。