Here is a possible reusable implementation in c# :
class DisposableHelper : IDisposable
{
private Action end;
// When the object is created, write "begin" function
public DisposableHelper(Action begin, Action end)
{
this.end = end;
begin();
}
// When the object is disposed (end of using block), write "end" function
public void Dispose()
{
end();
}
}
public static class DisposableExtensions
{
public static IDisposable DisposableTr(this HtmlHelper htmlHelper)
{
return new DisposableHelper(
() => htmlHelper.BeginTr(),
() => htmlHelper.EndTr()
);
}
}
In this case, BeginTr
and EndTr
directly write in the response stream. If you use extension methods that return a string, you'll have to output them using :
htmlHelper.ViewContext.HttpContext.Response.Write(s)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…