문제

.NET을 사용하고 있습니다 HtmlTextWriter HTML을 생성합니다.

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의 솔루션에 대한 논의는 괜찮을 것입니다.

도움이 되었습니까?

해결책

GenerateHTML () 호출 중에 발생하는 오류에 대해서만 우려하고 두 번째 접근 방식이 마음에 들지 않는 경우 (나에게는 괜찮은 것처럼 보이면) 마감 스팬 태그를 최종 블록으로 이동하고 공개 통화를 꺼내십시오. :

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

이런 식으로 스팬은 항상 열리고 항상 닫힙니다. 생성 html이 예외를 던지면 그것을 잡아서 범위 내부에 오류를 생성하기 전에 스팬 내부에 오류를 생성합니다.

물론, 예외가 태그를 쓰려고 시도하면 어쨌든 오류 메시지를 작성하지 않으므로 다른 곳에서 처리되고 있다고 가정 할 것입니다.

다른 팁

Try/Catch 사용을 피하고 대신 결과가 예상 했던지 확인해야합니다. 내가 여기서 볼 수있는 유일한 것은 myHTML이 null 일 수 있다는 것입니다.

문자열 myhtml = myobject.generatehtml ();

if (myHTML != null)
{
   htw.RenderBeginTag( HtmlTextWriterTag.Span );
   htw.Write(myHtml)     
   htw.RenderEndTag( );
else
{
   GenerateHtmlErrorMessage(htw);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top