什么';C#与VB中的With语句等价吗?

什么';C#与VB中的With语句等价吗?,c#,vb.net,C#,Vb.net,可能重复: VB有一个我非常喜欢的特性,With语句。C#有与之相当的东西吗?我知道可以使用use不必键入名称空间,但仅限于此。在VB中,可以执行以下操作: With Stuff.Elements.Foo .Name = "Bob Dylan" .Age = 68 .Location = "On Tour" .IsCool = True End With C#中的相同代码是: Stuff.Elements.Foo.Name = "Bob Dylan"; Stu

可能重复:

VB有一个我非常喜欢的特性,
With
语句。C#有与之相当的东西吗?我知道可以使用
use
不必键入名称空间,但仅限于此。在VB中,可以执行以下操作:

With Stuff.Elements.Foo
    .Name = "Bob Dylan"
    .Age = 68
    .Location = "On Tour"
    .IsCool = True
End With
C#中的相同代码是:

Stuff.Elements.Foo.Name = "Bob Dylan";
Stuff.Elements.Foo.Age = 68;
Stuff.Elements.Foo.Location = "On Tour";
Stuff.Elements.Foo.IsCool = true;

不是真的,你必须分配一个变量。所以

    var bar = Stuff.Elements.Foo;
    bar.Name = "Bob Dylan";
    bar.Age = 68;
    bar.Location = "On Tour";
    bar.IsCool = True;
或者在C#3.0中:

C#3.0中最接近的一点是,您可以使用构造函数初始化属性:

Stuff.Elements.Foo foo = new Stuff.Elements.Foo() {Name = "Bob Dylan", Age = 68, Location = "On Tour", IsCool = true}

除了对象初始值设定项(仅在构造函数调用中可用)之外,您可以得到的最好结果是:

var it = Stuff.Elements.Foo;
it.Name = "Bob Dylan";
it.Age = 68;
...

dupe您将“Stuff.Elements.Foo”视为一种类型。这就是它在VB代码中的使用方式,还是它实际上是对嵌套变量的引用?这项技术非常有效,但我认为您的代码不太正确。我很久以前写过一篇关于如何使用扩展方法和lambda表达式在c#中模拟with语句的文章。@Kenneth:这很聪明,尽管可以说
Object.Child.grander.greatgrander.Property1=1违反了德米特定律。@Robert,也许吧,但这是另一个线程的主题。您将“Stuff.Elements.Foo”视为一个类型。这就是它在VB代码中的使用方式,还是它实际上是对嵌套变量的引用?这项技术非常有效,但我认为您的代码不太正确。(我在这里复制了quark的评论,因为它也适用于这个答案)
var it = Stuff.Elements.Foo;
it.Name = "Bob Dylan";
it.Age = 68;
...