2009-06-30 16 views
16

Sé que C# tiene la palabra clave using, pero using elimina el objeto automáticamente.Equivalencia de "con ... fin con" en C#?

¿Existe la equivalencia de With...End With en Visual Basic 6.0?

+2

"con" en realidad existía mucho antes que VB. Existe en Pascal, para tratar con tipos de registros. No sé si Pascal tomó prestada la idea de otra parte. – JeffK

Respuesta

28

C# no tiene un constructo de lenguaje equivalente para eso.

+3

esto es cierto. Pero si tienes una clase con métodos que devuelven 'esto', entonces puedes encadenar los métodos. – Dlongnecker

5

No hay equivalente a Con ... Terminar con en C#.

Aquí está a comparison chart que ilustra las diferencias entre Visual Basic y C#.

+0

Ese cuadro de comparación es impresionante. Estoy trabajando en la transición a C# desde VB y eso será muy útil. –

2

No hay una estructura equivalente en C#. Esta es una característica de Visual Basic 6.0/VB.NET.

31

No es equivalente, pero ¿funcionaría esta sintaxis para usted?

Animal a = new Animal() 
{ 
    SpeciesName = "Lion", 
    IsHairy = true, 
    NumberOfLegs = 4 
}; 
+0

"Con" no crea instancias, entonces esto es incorrecto. –

6

creo que el equivalente del VB siguiente:

With SomeObjectExpression() 
    .SomeProperty = 5 
    .SomeOtherProperty = "Hello" 
End With 

sería esto es C#:

{ 
    Var q=SomeOtherExpression(); 
    q.SomeProperty = 5; 
    q.SomeOtherProperty = "Hello"; 
} 

La única diferencia real es que en VB, la identificador no tiene un nombre "q", sino que es simplemente un identificador predeterminado que se utiliza cuando se encuentra un período sin un y otro identificador antes.

+1

¿Qué pasa con los cráneos exteriores?Lo siento, pero esto no es de ninguna manera cerca de equivalente. Es solo un montón de llamadas a setters. – tomfanning

+2

Las llaves externas establecen el alcance de la variable q. Suponiendo que la expresión del objeto sea una clase en lugar de una estructura, creo que el código VB.Net y C# anterior son casi exactamente equivalentes. La primera declaración es un ejemplo de cómo se podría usar una declaración con, y la última declaración es una traducción C#. El ejemplo de C# usa un conjunto de pares porque eso es lo que hace el ejemplo de VB.net elegido arbitrariamente. El punto esencial es que el "con" es equivalente a definir una variable temporal y luego usarla en cualquier momento que se use un período sin identificador precedente. – supercat

+0

Eso no es equivalente, es una alternativa. –

15

No hay equivalente, pero creo que discutir una sintaxis puede ser interesante.

Me gusta;

NameSpace.MyObject. 
{ 
    active = true; 
    bgcol = Color.Red; 
} 

¿Alguna otra sugerencia?

No puedo imaginar que agregar esta característica de idioma sea difícil, esencialmente solo un preprocesado.

EDIT:

que estaba enfermo de esperar a esta característica, por lo que aquí es y extensión que logra un comportamiento similar.

/// <summary> 
/// C# implementation of Visual Basics With statement 
/// </summary> 
public static void With<T>(this T _object, Action<T> _action) 
{ 
    _action(_object); 
} 

Uso;

LongInstanceOfPersonVariableName.With(x => { 
    x.AgeIntVar = 21; 
    x.NameStrVar = "John"; 
    x.NameStrVar += " Smith"; 
    //etc.. 
}); 

EDIT: Curiosamente, parece que alguien me ganó de mano, de nuevo, con esta "solución". Oh, bueno ...

+0

Aunque no es exactamente lo mismo, me gusta tu idea. Si se utiliza con un buen formato, puede hacer que el código sea más legible. – Rudi

+0

Entonces, terminaste repitiendo el nombre de la variable nuevamente. Puede hacer lo mismo con: 'x = LongInstanceOfPersonVariableName; x.AgeIntVar = 21; // etc.' – LoBo

+1

Acabo de vomitar un poco en mi boca. – JJS

Cuestiones relacionadas