2009-07-24 24 views
20

Duplicar posibles:
Equivalence of “With…End With” in c#?¿Cuál es el equivalente de C# a la declaración With en VB?

Hubo una característica de VB que me gusta mucho ... la declaración With. ¿Tiene C# algún equivalente? Sé que puede usar using para no tener que escribir un espacio de nombre, pero está limitado a eso. En VB se puede hacer esto:

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

El mismo código en C# sería:

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

Respuesta

36

En realidad no, tiene que asignar una variable. Así

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

O en C# 3.0:

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

Está tratando 'Stuff.Elements.Foo' como un tipo. ¿Es así como se usa en el código VB, o es en realidad una referencia a una variable anidada? La técnica es perfectamente válida, pero creo que su código no es del todo correcto. – quark

+3

Escribí un [blog] (http://blog.baltrinic.com/software-development/dotnet/c-equivalent-for-visual-basic-with-statement) algún tiempo atrás sobre cómo simular una declaración con en C# usando métodos de extensión y expresiones lambda. –

+1

@ Kenneth: Es bastante inteligente, aunque podría argumentarse que 'Object.Child.Grandchild.GreatGrandchild.Property1 = 1;' viola la Ley de Demeter. –

4

Lo más parecido en C# 3.0, es que se puede utilizar un constructor para inicializar propiedades:

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

Está tratando 'Stuff.Elements.Foo' como un tipo. ¿Es así como se usa en el código VB, o es en realidad una referencia a una variable anidada? La técnica es perfectamente válida, pero creo que su código no es del todo correcto. (Copié el comentario de quark aquí, ya que también se aplica a esta respuesta) – MarkJ

7

Aparte de inicializadores de objeto (utilizable solo en llamadas de constructor), lo mejor que puede obtener es:

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