在C#中是否有类似于PHPs list()的语言结构?

时间:2010-08-30 18:17:25

标签: c# php c#-4.0 syntactic-sugar language-construct

PHP有一个语言结构list(),它在一个语句中提供多个变量赋值。

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

C#中有类似的东西吗?

如果没有,是否有任何解决方法可能有助于避免以下代码,而不必处理反射

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.
    }
}

4 个答案:

答案 0 :(得分:5)

不,我担心没有任何好的方法可以做到这一点,像你的例子这样的代码经常被写入。太糟糕了。我的哀悼。

如果你愿意为了简洁而牺牲封装,那么在这种情况下你可以使用对象初始化器语法而不是构造函数:

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,
    // ...
};

答案 1 :(得分:2)

我认为您正在寻找对象和集合初始值设定项

var person = new Person()
{
    Firstname = "Kris",
    Lastname = "van der Mast"
}

例如,Firstname和Lastname都是Person类的属性。

public class Person
{
    public string Firstname {get;set;}
    public string Lastname {get;set;}
}

答案 2 :(得分:1)

“多变量初始化”或“多变量分配”?

用于初始化

$a = 0; 
$b = 0; 
list($a, $b) = array(2, 3); 

将是:

 int a=2, b=3;

对于作业,没有捷径。它必须是两个声明,但如果您愿意,可以将这两个声明放在一行:

 a=2; b=3;

答案 3 :(得分:0)

是 - 您可以使用对象初始值设定项(C#3.0的新增功能)消除构造函数中的所有代码。这是一个很好的解释:

http://weblogs.asp.net/dwahlin/archive/2007/09/09/c-3-0-features-object-initializers.aspx