Search code examples
c#phpc#-4.0syntactic-sugarlanguage-construct

Is there a language construct similar to PHPs list() in C#?


PHP has a language construct list() which provides multiple variables assignment in one statement.

$a = 0;
$b = 0;
list($a, $b) = array(2, 3);
// Now $a is equal to 2 and $b is equal to 3.

Is there a similar thing in C#?

If not, is there any workaround which may help to avoid code like the following, without having to deal with reflection?

public class Vehicle
{
    private string modelName;
    private int maximumSpeed;
    private int weight;
    private bool isDiesel;
    // ... Dozens of other fields.

    public Vehicle()
    {
    }

    public Vehicle(
        string modelName,
        int maximumSpeed,
        int weight,
        bool isDiesel
        // ... Dozens of other arguments, one argument per field.
        )
    {
        // Follows the part of the code I want to make shorter.
        this.modelName = modelName;
        this.maximumSpeed = maximumSpeed;
        this.weight= weight;
        this.isDiesel= isDiesel;
        /// etc.
    }
}

Solution

  • No, I'm afraid there isn't any good way to do that, and code like your example gets written often. It sucks. My condolences.

    If you're willing to sacrifice encapsulation for concision, you can use object initializer syntax instead of a constructor for this case:

    public class Vehicle
    {
        public string modelName;
        public int maximumSpeed;
        public int weight;
        public bool isDiesel;
        // ... Dozens of other fields.
    }
    
    var v = new Vehicle {
        modelName = "foo",
        maximumSpeed = 5,
        // ...
    };