use*_*179 12 c# properties object-initializers
在动态对象创建一个匿名类型的对象(即在对象初始化器内)时,属性是否可能以某种方式相互引用?我在下面的简化示例需要重用该Age属性,而不需要进行第二次大量调用GetAgeFromSomewhere().当然它不起作用.有关如何实现这一目标的任何建议?
var profile = new {
Age = GetAgeFromSomewhere(id),
IsLegal = (Age>18)
};
Run Code Online (Sandbox Code Playgroud)
对于动态对象匿名类型的对象初始化器,这样的事情是可能的还是不可能的?
Ron*_*yer 10
不幸的是,即使使用显式类型的对象也不可能.这是因为对象初始化器的工作方式.例如:
public class MyClass
{
public int Age = 10;
public bool IsLegal = Age > 18;
}
Run Code Online (Sandbox Code Playgroud)
在"IsLegal"处产生此编译器错误:
错误1字段初始值设定项无法引用非静态字段,方法或属性"MyClass.Age"...
字段初始值设定项不能引用其他非静态字段,并且由于匿名类型不创建静态字段,因此不能使用一个字段的值来初始化另一个字段.解决这个问题的唯一方法是将变量声明为匿名类型,并在初始化程序中使用它们.
int age = GetAgeFromSomewhere(id);
var profile = new {
Age = age,
IsLegal = age > 18
};
Run Code Online (Sandbox Code Playgroud)
不要复杂化,保持简单
//Create a variable
var age = GetAgeFromSomewhere(id);
var profile = new {
Age = age,
IsLegal = age>18
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5621 次 |
| 最近记录: |