我正在使用这个pattern滥用IDisposable的用法来正确格式化xml的输出:
public class XmlDisposable : IDisposable
{
private TextWriter xml;
private string tag;
public XmlDisposable(TextWriter xml, string tag)
{
this.xml = xml;
this.tag = tag;
xml.Write("<" + tag + ">");
}
public void Dispose()
{
xml.WriteLine("</" + tag + ">");
}
}
public static XmlDisposable Note(this TextWriter xml)
{
return new XmlDisposable(xml, "note");
}
public static XmlDisposable Body(this TextWriter xml)
{
return new XmlDisposable(xml, "body");
}
用法:
public void WriteNote(TextWriter xml, string bodyText)
{
using (xml.Note())
{
using (xml.Body())
{
xml.Write(bodyText);
}
}
}
这是有效的,因为编译器将使用“try ... finally”语句替换using。
我的问题如下: 我是否可以使用T4模板修改源文件,以便“using(xml ...())”的每个块将替换为以下内容:
var xml = new XmlDisposable(xmlWriter, tagName);
...
(xml as IDisposable).Dispose();
我知道这样做可能不是一个好主意,因为维护模板以及生成代码会产生额外的开销,但我只是好奇它是否可以完成。
谢谢!