对象初始化程序内的属性可以相互引用吗?

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)


Sat*_*pal 5

不要复杂化,保持简单

//Create a variable
var age = GetAgeFromSomewhere(id);
var profile = new {
  Age = age,
  IsLegal = age>18
}
Run Code Online (Sandbox Code Playgroud)

  • @ user3199179,然后创建一个普通类并声明派生属性. (2认同)