是否可以通过使用块在同一个内部声明2变量来使代码更紧凑?
using (var sr = new StringReader(content))
{
using (var xtr = new XmlTextReader(sr))
{
obj = XmlSerializer.Deserialize(xtr) as TModel;
}
}
#1 楼
可接受的方法只是链接语句:using (var sr = new StringReader(content))
using (var xtr = new XmlTextReader(sr))
{
obj = XmlSerializer.Deserialize(xtr) as TModel;
}
请注意,IDE也将支持此缩进,即它有意不尝试缩进第二个
using
语句。评论
@ MD.Unicorn是的,完全正确。这是有意的-这是C#提供的最简洁的方法:删除括号并省略缩进。请注意,IDE如何为此提供显式支持(否则它将缩进第二条语句)。
–康拉德·鲁道夫(Konrad Rudolph)
2012-02-22 13:53
@KonradRudolph我的问题有点令人困惑,但是我想问这是否实际上是为多种用途设计的离散语言功能,或者与(x)if(y){z; }。我认为您的评论回答了这一点;我正在阅读后者?
– ssube
2012年2月22日在14:21
@peachykeen是的,这绝对不是离散语言功能,而只是嵌套块。但是,IDE确实出于缩进的目的对其进行了特殊处理。
–康拉德·鲁道夫(Konrad Rudolph)
2012年2月22日14:40
我真的希望C#的使用形式不会开始新的块,而是将变量放在声明它们的块的末尾,例如:{using var x = new Reader(); x.Read(); }
– Stefan Dragnev
2014年9月5日在6:24
IL代码仍然保持不变。在所有两个嵌套的try finally块中,将在IL代码中生成该块。稍后实例化的xtr变量放置在内部的finally块中,而之前实例化的sr变量放置在外部的finally块中。
– RBT
2015年5月5日13:26
#2 楼
以下仅适用于相同类型的实例!感谢您的评论。此示例代码来自MSDN:
using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f))
{
// Use font3 and font4.
}
评论
这仅在变量属于相同类型时才有效。
– Mohammad Dehghan
2012年2月22日在13:54
如果两个对象属于同一类型,这似乎才起作用
– Antony Scott
2012年2月22日在13:55
然后将变量声明为IDisposable并稍后进行转换?
– RobertJørgensgaardEngdahl
2015年5月7日在8:17
@RobertJørgensgaardEngdahl:是的,也可以。刚刚尝试过。
–松鼠杀手
16-10-14在12:09
评论
不要使用新的XmlTextReader()。使用XmlReader.Create()从.NET 2.0开始不推荐使用新的XmlTextReader()。通过使用XmlReader.Create(),您将获得尽可能最好的派生XmlReader类,而不仅仅是一个XmlTextReader类。