在C#中是否有VB.NET“With”语句?

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中是否有一个语法我遗漏了,它做了同样的事情?


不,没有。

这是故意从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");


没有与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语句时。