c# - 对象初始值设定项中的属性可以相互引用吗?

标签 c# properties object-initializers

在创建动态对象匿名类型对象(即在对象初始值设定项内部)期间,属性是否可能以某种方式相互引用?我下面的简化示例需要重用 Age 属性,而无需再次调用 GetAgeFromSomewhere()。当然不行。关于如何实现这一点有什么建议吗?

var profile = new {
  Age = GetAgeFromSomewhere(id),
  IsLegal = (Age>18)
};

对于动态对象匿名类型的对象初始值设定项,这样的事情是可能的还是不可能的?

最佳答案

不幸的是,这是不可能的,即使是明确类型化的对象。这是因为对象初始化器的工作方式。例如:

public class MyClass
{
    public int Age = 10;
    public bool IsLegal = Age > 18;
}

在“IsLegal”处产生此编译器错误:

Error 1 A field initializer cannot reference the non-static field, method, or property 'MyClass.Age' ...

字段初始值设定项不能引用其他非静态字段,并且由于匿名类型不创建静态字段,因此您不能使用一个字段的值来初始化另一个字段。解决这个问题的唯一方法是在匿名类型之外声明变量并在初始化程序中使用它们。

int age = GetAgeFromSomewhere(id);
var profile = new {
  Age = age,
  IsLegal = age > 18
};

关于c# - 对象初始值设定项中的属性可以相互引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29719050/

相关文章:

c# - 如何判断电脑是否有wifi适配器?

c# - TextMeshPro 空引用异常

c# - GroupBy 元组列表 C#

C# 读取 .txt 文件格式化

C# 嵌套对象初始值设定项

javascript - 如何从对象子 sibling 访问对象子值?

c# - 通过将属性传递给方法来获取属性的名称

java - 反转属性的最短方法

c# 构造函数与自动属性和对象初始值设定项

c# - 使用对象初始化器 - Resharper 建议