什么';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;
...