Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Escribir menos en C#

Iniciado por XÑA, 12 de Julio de 2012, 10:15:22 AM

« anterior - próximo »

XÑA

Veamos, tengo un struct o una clase:

miVariable.a=0;
miVariable.b=0;
miVariable.c=0;
miVariable.d=0;
miVariable.e=0;


¿Puedo hacer algo así como en VBA?


With miVariable
             .a=0;
            .b=0;
end with



Gracias!

Manu343726

claro que puedes. Tienes la instrucción using( [objeto]){} que es equivalente al with/endwith de VBA y VB.NET

Recuerda que VB.NET es C# con sintaxis de VB, de manera que salvo en unas pocas cosas, la form de trabajar de ambos es exactamente la misma.

Ten en cuenta que ésta instrucción está diseñada para especificar al CLR el tiempo de vida de un objeto, es decir, mientras que con una variable normal no se eliminan sus recursos hasta que al CLR le da por hacer la recolección de basura; el objeto especificado en la instrucción using se mantendrá "vivo" dentro del scope del using. Una vez acabado éste, se liberan los recursos del objeto.
Es por ésto que los objetos utilizados con using deben implementar la interfaz IDisposable, ya que al finalizar el scope se llama al método Dispose() del objeto.

XÑA

Gracias, pero no se trata de eso. Yo lo que quiero es escribir menos. Using aquí no tiene sentido.... ;)

blau

Siempre puedes hacerte una funcion si vas a tener que escribir siempre lo mismo.

public void ResetTo(int valor)
{
    a=b=c=d=e=valor;
}

:P

XÑA

Por favor..un poco de seriedad.....  :P

[EX3]

Cita de: Manu343726 en 12 de Julio de 2012, 01:15:00 PM
claro que puedes. Tienes la instrucción using( [objeto]){} que es equivalente al with/endwith de VBA y VB.NET
No confundir With / End With de Visual Basic con el bloque Using de .NET, también presente en VB.NET. El bloque With no instancia una variable y la destruye al final del bloque como hace Using, es solo un mecanismo de abreviación para acceder a los miembros de un objeto ya instanciado.

Cita de: Manu343726 en 12 de Julio de 2012, 01:15:00 PM
Recuerda que VB.NET es C# con sintaxis de VB, de manera que salvo en unas pocas cosas, la form de trabajar de ambos es exactamente la misma.
Ojala fuera asi pero sigue habiendo muchas cosas que VB.NET no permite hacer que en C# si y viceversa. En C# yo echo de menos no poder indicar rangos o cosas asi en sentencias Switch / Case:

Select case var
    Case 2 to 6, 8 to 10, 38 to 40:
         (...)
End Select


En C# seria asi de incomodo:
switch (var)
{
    case 2: case 3: case 4: case 5: case 6: case 8: case 9: case 10: case 38: case 39: case 40:
        (...)
        break;
}


Y podria poner mas casos similares a este.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Manu343726

que mongolo, ésto me pasa por no leer, lo siento.

Al fin y al cabo, la instrucción with es un poco tonta (yo nunca la uso), ya que puedes copiar el nombre de la variable y pegar cada vez que la uses.

Sobre las similitudes entre c# y vb.net, es cierto que no son exactamente iguales, pero la manera de trabajar es la misma. Casi no noto la transición entre vbnet y c#, asi como a java se me hace mas "diferente" . Y ya no hablemos de c++ y sus hijoputeces.
EX3 yo también me acostumbré a los select case de vb, y ahora cada vez que hago una casuistica del tipo "1 a 10, y 11 a 30" en c++ me deprimo

blau

#7
Bueno, fuera cachondeo... tb lo puedes hacer mediante reflexión... que te da más juego....

    public static void ResetTo( this object o, params object[] args )
       {
           if ( args.Length ==0 ) return;
           int idx = 0;
           foreach ( var fi in o.GetType( ).GetFields( ) )
               if ( fi.FieldType == args[idx].GetType( ) )
               {
                   fi.SetValue( o, args[idx] );
                   idx++;
                   if ( idx==args.Length ) return;
               }
       }


xDDDDDDDDDDDDDD

Manu343726

ahora en serio, siempre te quedan los iniciadores del constructor:


MyClass Object=new MyClass()
{
  atr1=val1;
  atr2=val2;
  etc etc...
}

Vicente

Otra forma de ejecutar varios metodos sobre una clase en C# es lo que se llama Method Chaining, que es una version muy basica de algo que se llama Fluent Interface.

http://en.wikipedia.org/wiki/Method_chaining
http://en.wikipedia.org/wiki/Fluent_interface

Pero el lenguaje no trae nada por defecto como en VB...






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.