2009-07-24 18 views
20

Powiel możliwe:
Equivalence of “With…End With” in c#?Co to jest odpowiednik C# z instrukcją With w VB?

Była jedna cecha VB, że bardzo podoba mi ... następującą adnotacją With. Czy C# ma jakikolwiek odpowiednik? Wiem, że możesz użyć using, aby nie musieć wpisywać przestrzeni nazw, ale jest ona ograniczona do tego. W VB można to zrobić:

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

Ten sam kod w języku C# byłoby:

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

Odpowiedz

36

Niezupełnie, trzeba przypisać zmienną. Więc

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

Albo w C# 3.0:

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

Traktujesz "Stuff.Elements.Foo" jako typ. Czy to jest sposób użycia w kodzie VB, czy jest to w rzeczywistości odwołanie do zmiennej zagnieżdżonej? Technika jest całkowicie poprawna, ale myślę, że twój kod nie jest całkiem poprawny. – quark

+3

Napisałem [blog] (http://blog.baltrinic.com/software-development/dotnet/c-equivalent-for-visual-basic-with-statement) jakiś czas temu, jak symulować wyrażenie z C# za pomocą metod rozszerzających i wyrażeń lambda. –

+1

@Kenneth: To całkiem sprytne, chociaż można argumentować, że 'Object.Child.Grandchild.GreatGrandchild.Property1 = 1;' narusza prawo Demeter. –

4

Najbliższy rzeczą w C# 3.0, jest to, że można użyć konstruktora do inicjalizacji właściwości:

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

Traktujesz "Stuff.Elements.Foo" jako typ. Czy to jest sposób użycia w kodzie VB, czy jest to w rzeczywistości odwołanie do zmiennej zagnieżdżonej? Technika jest całkowicie poprawna, ale myślę, że twój kod nie jest całkiem poprawny. (Skopiowałem tutaj komentarz do kwarka, ponieważ dotyczy to również tej odpowiedzi) – MarkJ

7

Oprócz inicjatorów obiektu (możliwe do zastosowania tylko w wywołaniach konstruktorów), najlepiej można uzyskać:

var it = Stuff.Elements.Foo; 
it.Name = "Bob Dylan"; 
it.Age = 68; 
... 
Powiązane problemy