0

HtmlTextWriterHTMLを生成するために.Netを使用しています。

try
{
   htw.RenderBeginTag( HtmlTextWriterTag.Span );

   htw.Write(myObject.GenerateHtml());

   htw.RenderEndTag( );
}
catch (Exception e)
{
   GenerateHtmlErrorMessage(htw);
}

この例では、実行中にエラー例外がmyObject.GenerateHtml()発生した場合、素敵なエラー html を生成しますが、その前にspan決して閉じられない開始タグが表示されます。

私はそれをそのようにリファクタリングすることができました

try
{
   string myHtml = myObject.GenerateHtml();

   // now hope we don't get any more exceptions
   htw.RenderBeginTag( HtmlTextWriterTag.Span );
   htw.Write(myHtml)     
   htw.RenderEndTag( );
}
catch (Exception e)
{
   GenerateHtmlErrorMessage(htw);
}

大変な作業が終わるまでスパンは開きませんが、これは私にはぎこちなく見えます。HtmlWriter でロールバックする方法はありますか? ブロックを使用する負荷を入れなければならなかったとしても。

私は現在 .Net 2.0 で作業していますが、3.5 での解決策についての議論は問題ありません。

4

2 に答える 2

1

GenerateHtml() 呼び出し中に発生するエラーのみが懸念され、2 番目のアプローチが気に入らない場合 (私には問題ないように思えます)、終了スパン タグを finally ブロックに移動して、open 呼び出しを引き出してみませんか? :

htw.RenderBeginTag( HtmlTextWriterTag.Span );
try
{
   htw.Write(myObject.GenerateHtml());
}
catch (Exception e)
{
   GenerateHtmlErrorMessage(htw);
}
finally
{
   htw.RenderEndTag( );
}

このようにして、スパンは常に開かれ、常に閉じられます。GenerateHtml が例外をスローした場合は、それをキャッチしてスパン内でエラーを生成してから、それを閉じます。

もちろん、タグを書き込もうとして例外が発生した場合は、いずれにせよエラー メッセージを書き込むことはできません。そのため、別の場所で処理されていると想定します。

于 2008-11-15T08:06:04.867 に答える
-2

try/catch の使用は避け、代わりに、結果が期待どおりでないかどうかを確認してください。ここで確認できる唯一のことは、myHTML が null になる可能性があることです。次のようにしてみてください。

string myHtml = myObject.GenerateHtml();

if (myHTML != null)
{
   htw.RenderBeginTag( HtmlTextWriterTag.Span );
   htw.Write(myHtml)     
   htw.RenderEndTag( );
else
{
   GenerateHtmlErrorMessage(htw);
}
于 2008-11-13T09:41:52.480 に答える