gpt4 book ai didi

c# - 如何在 C# 成员初始值设定项中引用另一个属性值?

转载 作者:行者123 更新时间:2023-11-30 15:03:58 27 4
gpt4 key购买 nike

在 VB 中,以下是一个有效的对象初始化器,其中一个成员初始化器引用另一个先前已初始化的成员的值。

new MyObject() with {.Property1="x", .Property2 = .Property1 + "y"}

如果我尝试在 C# 中使用

做同样的事情
new MyObject() {Property1 = "x", Property2 = Property1 + "y"}

我得到了错误

The name 'Property1' does not exist in the current context.

这有点令人惊讶,因为这两种语言之间存在相当多的相似之处,但这也许是少数差异之一。

有没有办法在 C# 中做到这一点?对于那些想知 Prop 体用例可能是什么的人,我正在使用相当复杂的 LINQ 查询构建复合对象结构。

IEnumerable<Question> query =
(from q in dtQuestions.AsEnumerable()
join a in dtAnswers.AsEnumerable() on q.Field<int>("question_type_id") equals a.Field<int>("question_type_id") into Group
select new Question()
{
Id = q.Field<int>("question_type_id"),
SequenceNumber = q.Field<int>("sequence_no"),
IsChild = q.Field<bool>("isChildQuestion"),
EktronContentKey = q.Field<string>("ektron_content_key"),
Text = q.Field<string>("description"),
QuestionKindId = q.Field<int>("question_kind_type_id"),
Answers = (from a2 in Group
select new Answer()
{
Id = a2.Field<int>("answer_type_id"),
SequenceNumber = a2.Field<int>("sequence_no"),
EktronContentKey = a2.Field<string>("ektron_content_key"),
Text = a2.Field<string>("description"),
IsSelected = a2.Field<bool>("isSelected"),
ImageKey = q.Field<int>("question_type_id") == 2 ? "" : (Id % 2 == 0 ? "heating-gas-modern.png" : "heating-gas-condensing.png"),
ChildQuestionIds =
(from r in dtAnswerChildQuestions.AsEnumerable()
where r.Field<int>("answer_type_id") == Id
select r.Field<int>("question_type_id")).ToArray()
}).ToArray(),
SelectedAnswerId = QuestionKindId == 1 ?
(from Answer a3 in Answers
where a3.IsSelected == true
select a3.Id).SingleOrDefault() :
0,
SelectedAnswerIds = QuestionKindId == 2 ?
(from Answer a4 in Answers
where a4.IsSelected == true
select a4.id).ToArray() :
new int() { }
}
);

这里要解决的真正问题是对用于为 SelectedAnswerId 和 SelectedAnswerIds 赋值的 LINQ 表达式中的 Answers 属性的引用。我可能必须将这两个表达式分解到它们自己的独立作业中。

最佳答案

在 C# 中引用属性本身是不可能的。由于您有“X”,很明显可以编写代码来使用 X。

由于这是 Linq,您可能需要使用 Let clause并创建业务逻辑处理来处理 X 甚至 Y,然后进行成员初始化。

关于c# - 如何在 C# 成员初始值设定项中引用另一个属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934496/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com