Es tan simple como:
num1 = num2 = 5;
Cuando se usa una propiedad de objeto en lugar de variable, es interesante saber que getno se llama al descriptor de acceso del valor intermedio. Solo setse invoca el descriptor de acceso para todas las propiedades a las que se accede en la secuencia de asignación.
Tomemos por ejemplo una clase que escribe en la consola cada vez que se invoca el gety el descriptor de setacceso.
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;
}
}
}
Esto dará salida
AccessorTest.Value.get 5
AccessorTest.Value.set 5
AccessorTest.Value.set 5
Lo que significa que el compilador asignará el valor a todas las propiedades y no volverá a leer el valor cada vez que se asigne.
num1 = (num2 = 5)y la primera asignación que se ejecuta (num2 = 5) devuelve el valor 5 al mundo exterior, que a su vez se asigna a num1. Esto funciona ad infinitum (num0 = num1 = num2 = 5).