2009-07-24 3 views
20

Можно создать дубликат:
Equivalence of “With…End With” in c#?Что такое эквивалент C# для оператора With в VB?

Был одна особенность VB, что мне очень нравится ... With заявление. Имеет ли C# эквивалент? Я знаю, что вы можете использовать using, чтобы не вводить пространство имен, но оно ограничено только этим. В 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; 
+0

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

ответ

36

Не очень, вы должны назначить переменную. Так

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

Или в C# 3.0:

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

Вы относитесь к «Stuff.Elements.Foo» как к типу. Это то, как он используется в коде VB, или это действительно ссылка на вложенную переменную? Техника совершенно верна, но я думаю, что ваш код не совсем прав. – quark

+3

Я написал [блог] (http://blog.baltrinic.com/software-development/dotnet/c-equivalent-for-visual-basic-with-statement) некоторое время назад о том, как имитировать оператор with с помощью C# используя методы расширения и лямбда-выражения. –

+1

@ Kenneth: Это довольно умно, хотя можно утверждать, что 'Object.Child.Grandchild.GreatGrandchild.Property1 = 1;' нарушает Закон Деметры. –

4

Самая близкая вещь в C# 3.0, в том, что вы можете использовать конструктор для инициализации свойств:

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

Вы относитесь к «Stuff.Elements.Foo» как к типу. Это то, как он используется в коде VB, или это действительно ссылка на вложенную переменную? Техника совершенно верна, но я думаю, что ваш код не совсем прав. (Я скопировал комментарий кварка здесь, поскольку это относится и к этому ответу) – MarkJ

7

Помимо инициализаторы объектов (можно использовать только в вызовах конструктора), самое лучшее, что вы можете получить:

var it = Stuff.Elements.Foo; 
it.Name = "Bob Dylan"; 
it.Age = 68; 
... 
Смежные вопросы