Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: XÑA en 12 de Julio de 2012, 10:15:22 AM

Título: Escribir menos en C#
Publicado por: XÑA en 12 de Julio de 2012, 10:15:22 AM
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!
Título: Re: Escribir menos en C#
Publicado por: 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

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.
Título: Re: Escribir menos en C#
Publicado por: XÑA en 12 de Julio de 2012, 01:29:27 PM
Gracias, pero no se trata de eso. Yo lo que quiero es escribir menos. Using aquí no tiene sentido.... ;)
Título: Re: Escribir menos en C#
Publicado por: blau en 12 de Julio de 2012, 02:57:03 PM
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
Título: Re: Escribir menos en C#
Publicado por: XÑA en 12 de Julio de 2012, 03:46:47 PM
Por favor..un poco de seriedad.....  :P
Título: Re: Escribir menos en C#
Publicado por: [EX3] en 12 de Julio de 2012, 04:06:35 PM
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...
Título: Re: Re: Escribir menos en C#
Publicado por: Manu343726 en 12 de Julio de 2012, 09:31:51 PM
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
Título: Re: Escribir menos en C#
Publicado por: blau en 13 de Julio de 2012, 02:32:11 AM
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
Título: Re: Escribir menos en C#
Publicado por: Manu343726 en 13 de Julio de 2012, 12:14:56 PM
ahora en serio, siempre te quedan los iniciadores del constructor:


MyClass Object=new MyClass()
{
  atr1=val1;
  atr2=val2;
  etc etc...
}
Título: Re: Escribir menos en C#
Publicado por: Vicente en 13 de Julio de 2012, 12:20:10 PM
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...