2012-02-28 10 views
5

Powiel możliwe: Equivalence of “With…End With” in C#?Czy istnieje instrukcja VB.NET "With" w języku C#?

Więc nie wiem, czy to pytanie zostało zadane wcześniej i nie jestem wielkim fanem VB.NET. Ale jedną składnią, której mi brakuje w C#, jest składnia With.

W VB.NET można napisać:

Dim sb As New StringBuilder 
With sb 
    .Append("foo") 
    .Append("bar") 
    .Append("zap") 
End With 

Czy istnieje składni w C#, które nie zostały pominięte, że robi to samo?

+0

Naprawdę lepiej napisać to zamiast 'sb.Append (" foo ")' ?? Programuję od 12 lat w VB.NET i nigdy nie zrozumiałem korzyści płynących z tego oświadczenia. Kolejna rzecz, którą musisz sprawdzić za każdym razem (Co to było jeszcze raz?) –

+0

@TimSchmelter: Ciekawi mnie to samo. Mogę kodować w VB.NET przez ostatnie 4 lata i nigdy nie znalazłem zastosowania dla instrukcji With, z wyjątkiem New ... With construct. –

Odpowiedz

11

Nie, nie ma.

Zostało celowo pominięte w języku C#, ponieważ nie zapewnia większej wygody, a także dlatego, że można go łatwo użyć do napisania mylącego kodu.

wpis na blogu Scott Wiltamuth, Program Manager Grupa Visual C#, O z kluczowych: http://msdn.microsoft.com/en-us/vstudio/aa336816.aspx

Dla specjalnego przypadku StringBuilder można łańcuchowe wywołania:

StringBuilder sb = new StringBuilder() 
    .Append("foo") 
    .Append("bar") 
    .Append("zap"); 
+2

Po prostu z ciekawości, czy mógłbyś podać przykład mylącego kodu VB.Net, który używa z/koniec z? – ken2k

+0

możesz również zauważyć, że C# ma składnię inicjalizatora obiektu, ale można go używać tylko do ustawiania publicznych zmiennych instancji, a nie do wywoływania funkcji. –

2

Nie, nie ma równoważnej składni.

With to tylko VB/VB.NET.

0

Nie nieprawdaż 't - to tylko Visual Basic.

Jednym z głównych powodów, dla których nie było C# było to, że może to prowadzić do mylącego kodu, na przykład przy użyciu zagnieżdżonych instrukcji With.

+0

Link wydaje się być uszkodzony –

+0

Linki wydają się być (skutecznie) zepsute - przekierowują do nieswoistej strony. –

4

Nie ma bezpośredniego odpowiednika do instrukcji VB With.

jednak pamiętać, że StringBuilder.Append zwraca instancję StringBuilder, więc następujący kod jest równoważne oryginalny:

sb.Append("foo").Append("bar").Append("zap"); 

lub nawet

sb.Append("foo") 
    .Append("bar") 
    .Append("zap"); 

Nie jest to możliwe dla wszystkich obiektów/metod, chociaż.

2

Jest odpowiednikiem dla New Type With:

var obj = new Type { 
    PropName = Value, 
    PropName = Value 
}; 

, ale nie dla wspólnego With.

Powiązane problemy