Is there a VB.NET “With” statement in C#?
Possible Duplicate:
Equivalence of"With…End With" in C#?
所以我不知道这个问题以前有没有被问过,我也不太喜欢vb.net。但我在C中缺少的一种语法是With语法。
在vb.net中,您可以编写:
1 2 3 4 5 6
| Dim sb As New StringBuilder
With sb
.Append("foo")
.Append("bar")
.Append("zap")
End With |
C中是否有一个语法我遗漏了,它做了同样的事情?
- 写这个比写sb.Append("foo")好得多??我在vb.net上编程已经12年了,我从来没有理解WITH语句的好处。还有一件事,你每次都必须查找(那又是什么?)
- @蒂姆施梅勒:我也想知道同样的事情。在过去的4年里,我在vb.net中编写代码,除了新的…with构造之外,我从来没有找到过WITH语句的用法。
不,没有。
这是故意从C中删去的,因为它没有增加太多的便利性,而且因为它很容易被用来编写令人困惑的代码。
来自Scott Wiltamuth的博客文章,他是Visual C_的组程序经理,关于with关键字:http://msdn.microsoft.com/en-us/vstudio/aa336816.aspx
对于StringBuilder的特殊情况,您可以通过以下方式连接电话:
1 2 3 4
| StringBuilder sb = new StringBuilder ()
.Append("foo")
.Append("bar")
.Append("zap"); |
- 只是出于好奇,您能提供一个关于与/end with一起使用的令人困惑的VB.NET代码的示例吗?
- 您还可能注意到,C具有对象初始值设定项语法,但它只能用于设置公共实例变量,而不能进行函数调用。
没有与vb With语句直接类似的内容。
但是,请注意,StringBuilder.Append返回StringBuilder实例,因此以下代码与原始代码相同:
1
| sb.Append("foo").Append("bar").Append("zap"); |
甚至
1 2 3
| sb.Append("foo")
.Append("bar")
.Append("zap"); |
但是,对于所有对象/方法,这是不可能的。
New Type With有一个等价物:
1 2 3 4
| var obj = new Type {
PropName = Value,
PropName = Value
}; |
但不适用于普通的With。
不,没有等价的语法。
With仅为vb/vb.net。
没有-这只是Visual Basic。
它被排除在C之外的一个主要原因是它可能导致代码混淆,例如在使用嵌套的With语句时。
- 链接似乎已断开
- 链接似乎被(有效地)破坏了——它重定向到一个非特定的页面。