所以我不知道是否曾经问过这个问题,我也不是VB.NET的忠实拥护者。但是With
语法是我在C#中缺少的一种语法。
在VB.NET中,您可以编写:
Dim sb As New StringBuilder
With sb
.Append("foo")
.Append("bar")
.Append("zap")
End With
我想念的C#语法是否有相同的作用?
不,没有。
[C#故意将其排除在外,因为它并没有增加太多便利,并且因为它很容易用于编写混乱的代码。
来自Visual C#的组程序经理,Scott Wiltamuth的博客文章,关于with关键字:https://web.archive.org/web/20111217005440/http://msdn.microsoft.com/en-us/vstudio/aa336816.aspx
对于StringBuilder
的特殊情况,您可以链接呼叫:
StringBuilder sb = new StringBuilder()
.Append("foo")
.Append("bar")
.Append("zap");
与VB With
语句没有直接类似。
但是请注意,StringBuilder.Append
返回StringBuilder
实例,因此以下代码与您的原始代码等效:
sb.Append("foo").Append("bar").Append("zap");
甚至
sb.Append("foo")
.Append("bar")
.Append("zap");
但是,并非所有对象/方法都可行。
不,没有等效的语法。
[With
仅是VB / VB.NET。
[C0有一个等效项:
New Type With
,但不是普通的var obj = new Type {
PropName = Value,
PropName = Value
};
。
没有-这是仅Visual Basic。
[C#之所以被排除在外的主要原因之一是,它可能导致混淆的代码,例如,当使用嵌套的With
语句时。