2016-05-19 2 views
0

.ToString()をStringBuilderに適用すると、Visual Studio 2013デバッガが予期しない動作をします。コントローラでは、私はいくつかのエラーを傍受しようとしており、このSOの投稿からいくつかのコードを適用しました。 How to get all Errors from ASP.Net MVC modelState?StringBuilderを使用した後にVisual Studio 2013デバッガが文字列の内容を表示できないのはなぜですか?

しかし、デバッガが実行され、StringBuilderに.ToString()アクションが適用された後、ウォッチまたは文字列の上にカーソルを置いて文字列の内容を調べることができません。

string theErrors = string.Empty; 
if (!ModelState.IsValid) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach (ModelState modelState in ViewData.ModelState.Values) 
    { 
     foreach (ModelError error in modelState.Errors) 
     { 
      sb.AppendFormat("{0}{1}", error.ErrorMessage, Environment.NewLine); 
     } 
    } 
    theErrors = sb.ToString(); 
    sb = null; 
} 

このコードの後に​​ブレークポイントを置き、 "theErrors"文字列を調べようとすると、Visual Studioデバッガはこのメッセージを表示します。

"名前 'theErrors'は現在のコンテキストに存在しません。

これは予期しない動作です。 StringBuilderに何か問題がありますか?私はStringBuilderを頻繁に使用していますが、以前はこれを見ていませんでした。ご協力いただきありがとうございます。

+0

どのビルド構成を使用していますか?このコードの後ろに 'tblErrors'を使っていますか? –

+0

ありがとうございました。あなたの質問に従っているかどうかわかりません。私は後でその変数をコード内で使うつもりです。私の正気のために、私はStringBuilderを文字列に置き換え、それに連結し始めました。そして、*エラーをキャプチャします。私はその回避策を実行することができますが、それは迷惑StringBuilderが期待どおりに動作していないです。 –

+1

設定が「リリース」または「デバッグ」に設定されていることを意味します。 'リリース'ビルドでは、コンパイラは未使用の変数を最適化します。 –

答えて

1

あなたのビルド構成は「リリース」に設定されています。

enter image description here

「最適化コード」オプション「リリース」設定でデフォルトで有効になっています。

enter image description here

コードの最適化は、未使用の変数を最適化します。ビルド構成を「デバッグ」に変更すると、これが中止されます。

関連する問題