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