什么是C#相当于VB中的With语句?

Bob*_*lan 32 c# vb.net

可能重复:
c#中"With ... End With"的等价性?

我真的很喜欢VB的一个特性...... With声明.C#有任何等价物吗?我知道你可以使用using不必键入命名空间,但它仅限于此.在VB中你可以这样做:

With Stuff.Elements.Foo
    .Name = "Bob Dylan"
    .Age = 68
    .Location = "On Tour"
    .IsCool = True
End With
Run Code Online (Sandbox Code Playgroud)

C#中的相同代码是:

Stuff.Elements.Foo.Name = "Bob Dylan";
Stuff.Elements.Foo.Age = 68;
Stuff.Elements.Foo.Location = "On Tour";
Stuff.Elements.Foo.IsCool = true;
Run Code Online (Sandbox Code Playgroud)

Rob*_*vey 44

不是,你必须分配一个变量.所以

    var bar = Stuff.Elements.Foo;
    bar.Name = "Bob Dylan";
    bar.Age = 68;
    bar.Location = "On Tour";
    bar.IsCool = True;
Run Code Online (Sandbox Code Playgroud)

或者在C#3.0中:

    var bar = Stuff.Elements.Foo
    {
        Name = "Bob Dylan",
        Age = 68,
        Location = "On Tour",
        IsCool = True
    };
Run Code Online (Sandbox Code Playgroud)

  • 您将'Stuff.Elements.Foo'视为一种类型.它是如何在VB代码中使用的,还是它实际上是对嵌套变量的引用?该技术完全有效,但我认为您的代码不太正确. (10认同)
  • 我写了一篇[博客](http://blog.baltrinic.com/software-development/dotnet/c-equivalent-for-visual-basic-with-statement)一段时间后回到如何使用c#模拟一个with语句扩展方法和lambda表达式. (3认同)
  • @Robert,_maybe_但这是另一个主题的话题. (2认同)

Pav*_*aev 8

除了对象初始化器(仅在构造函数调用中可用)之外,您可以获得的最佳结果是:

var it = Stuff.Elements.Foo;
it.Name = "Bob Dylan";
it.Age = 68;
...
Run Code Online (Sandbox Code Playgroud)


fos*_*son 6

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

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

  • 您将'Stuff.Elements.Foo'视为一种类型.它是如何在VB代码中使用的,还是它实际上是对嵌套变量的引用?该技术完全有效,但我认为您的代码不太正确.(我在这里复制夸克的评论,因为它也适用于这个答案) (2认同)