2009-09-14 58 views
110

¿Hay alguna manera (por curiosidad porque encontré varias asignaciones de mismo valor a múltiples variables hoy) en C# para asignar un valor a múltiples variables a la vez en un declaraciones individuales?C#: Asignar el mismo valor a múltiples variables en una sola declaración

Algo a lo largo de estas líneas (pseudocódigo):

int num1 = 1; 
int num2 = 1; 

num1 & num2 = 5; 
Probablemente no

pero pensé que valía la pena preguntar por si es realmente posible algo similar!

Respuesta

189

Es tan simple como:

num1 = num2 = 5; 

Cuando se utiliza una propiedad de objeto en lugar de la variable, es interesante saber que el descriptor de acceso get del valor intermedio no se llama. Solo se invoca el acceso set para todas las propiedades a las que se accede en la secuencia de asignación.

Tomemos como ejemplo una clase que escribe en la consola cada vez que se invoca el acceso get y set.

static void Main(string[] args) 
{ 
    var accessorSource = new AccessorTest(5); 
    var accessor1 = new AccessorTest(); 
    var accessor2 = new AccessorTest(); 

    accessor1.Value = accessor2.Value = accessorSource.Value; 

    Console.ReadLine(); 
} 

public class AccessorTest 
{ 
    public AccessorTest(int value = default(int)) 
    { 
     _Value = value; 
    } 

    private int _Value; 

    public int Value 
    { 
     get 
     { 
      Console.WriteLine("AccessorTest.Value.get {0}", _Value); 
      return _Value; 
     } 
     set 
     { 
      Console.WriteLine("AccessorTest.Value.set {0}", value); 
      _Value = value; 
     } 
    } 
} 

Esta es la salida

AccessorTest.Value.get 5 
AccessorTest.Value.set 5 
AccessorTest.Value.set 5 

Lo que significa que el compilador asignará el valor de todas las propiedades y no va a volver a leer el valor cada vez que se le asigna.

+1

Parece raro, pero funciona!Gracias;) – Alex

+1

Acabo de leerlo como aparece: num1 es igual a num2, que equivale a 5 –

+25

No es raro en realidad. La lógica es la siguiente: La operación de asignación en sí devuelve un valor, que es el valor que se ha asignado. La secuencia de ejecución es: '' num1 = (num2 = 5) '' y la primera asignación que se ejecuta ('' num2 = 5'') devuelve el valor 5 al mundo exterior, que a su vez está asignado a num1. Esto funciona ad infinitum ('' num0 = num1 = num2 = 5''). – Jpsy

5
int num1, num2, num3; 

num1 = num2 = num3 = 5; 

Console.WriteLine(num1 + "=" + num2 + "=" + num3); // 5=5=5 
5

Algo como esto.

num1 = num2 = 5 
11

Prueba esto:

num1 = num2 = 5; 

Tenga en cuenta que esto no funcionará en VB.

+1

¿Sabes si hay alguna sintaxis alternativa para desarrolladores de VB? o ¿la asignación múltiple simplemente no está disponible en VB? – ckittel

+3

@cki: AFAIK, no es compatible. – SLaks

+0

@ckittel En VB '=' se usa tanto para asignación como para igualdad, así 'num1 = num2 = 5' significaría" asignar el resultado booleano de si cinco es igual a 'num2' a la variable' num1' ". Como el operador '=' tiene estos dos significados, no hay forma de representar esta sintaxis. Lo mejor que puedes hacer es crear una función que tenga en cuenta un número de parámetros 'byref' y un valor y asignarle todos los parámetros a ese valor. – Servy

4

Su ejemplo sería:

int num1 = 1; 
int num2 = 1; 

num1 = num2 = 5; 
40

esto va a hacer lo que desea:

int num1, num2; 
num1 = num2 = 5; 

'num2 = 5' asignación devolverá el valor asignado.

Esto le permite hacer cosas locas como num1 = (num2 = 5) +3; que asignarán 8 a num1, aunque no recomendaría hacerlo porque no es muy legible.

24
int num1=5,num2=5 

Declaración y asignación de variables en la misma instrucción.

+0

Esta es mi forma preferida. En mi opinión, es el más legible. –

+0

¿Es esta una sola declaración o dos declaraciones? –

3

Algo un poco más corto en sintaxis pero tomando lo que los otros ya han indicado.

int num1, num2 = num1 = 1; 
0

Es simple.

int num1,num2; 
num1 = num2 = 5; 
Cuestiones relacionadas