2009-07-24 8 views
20

Mögliche Duplizieren:
Equivalence of “With…End With” in c#?Wie ist das C# der With-Anweisung in VB?

Es war ein Merkmal von VB, dass ich wirklich wie ... die With Aussage. Hat C# eine Entsprechung dazu? Ich weiß, dass Sie using verwenden können, um einen Namespace nicht eingeben zu müssen, aber es ist nur darauf beschränkt. In VB können Sie dies tun:

With Stuff.Elements.Foo 
    .Name = "Bob Dylan" 
    .Age = 68 
    .Location = "On Tour" 
    .IsCool = True 
End With 

Der gleiche Code in C# wäre:

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

dupe http://stackoverflow.com/questions/1063429/equivalence-of-with-end-with-in-c – Jimmy

Antwort

36

Nicht wirklich, müssen Sie eine Variable zuweisen. So

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

oder in C# 3.0:

var bar = Stuff.Elements.Foo 
    { 
     Name = "Bob Dylan", 
     Age = 68, 
     Location = "On Tour", 
     IsCool = True 
    }; 
+9

Sie behandeln "Stuff.Elements.Foo" als ein Typ. Wird es im VB-Code verwendet oder ist es eine Referenz auf eine verschachtelte Variable? Die Technik ist perfekt, aber ich denke, dass dein Code nicht ganz richtig ist. – quark

+3

Ich schrieb ein [Blog] (http://blog.baltrinic.com/software-development/dotnet/c-äquivalent-for-visual-basic-with-statement) einige Zeit zurück auf, wie man eine with-Anweisung in C# simuliert Verwenden von Erweiterungsmethoden und Lambda-Ausdrücken. –

+1

@Kenneth: Das ist ziemlich clever, obwohl man argumentieren könnte, dass 'Object.Child.Grandchild.GreatGrandchild.Property1 = 1;' gegen das Demeter-Gesetz verstößt. –

4

Die nächste Sache in C# 3.0, ist, dass Sie einen Konstruktor verwenden können Eigenschaften initialisieren:

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

Sie behandeln "Stuff.Elements.Foo" als eine Art. Wird es im VB-Code verwendet oder ist es eine Referenz auf eine verschachtelte Variable? Die Technik ist perfekt, aber ich denke, dass dein Code nicht ganz richtig ist. (Ich habe Quarks Kommentar hier kopiert, da es auch auf diese Antwort zutrifft) – MarkJ

7

Abgesehen von Objektinitialisierer (nur in Konstruktoraufrufen verwendbar), das Beste, das Sie erhalten können, ist:

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