Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置内部对象';使用C中的对象初始化语法将s成员作为外部对象# 上下文 我有一个问题类型的列表 类问题,依次包含一个列表 类Answer有一个名为public Question Question{get;set;}的成员,该成员存储答案所针对的问题_C#_This_Object Initializers_Collection Initializer - Fatal编程技术网

C# 设置内部对象';使用C中的对象初始化语法将s成员作为外部对象# 上下文 我有一个问题类型的列表 类问题,依次包含一个列表 类Answer有一个名为public Question Question{get;set;}的成员,该成员存储答案所针对的问题

C# 设置内部对象';使用C中的对象初始化语法将s成员作为外部对象# 上下文 我有一个问题类型的列表 类问题,依次包含一个列表 类Answer有一个名为public Question Question{get;set;}的成员,该成员存储答案所针对的问题,c#,this,object-initializers,collection-initializer,C#,This,Object Initializers,Collection Initializer,我使用集合初始化语法将问题项添加到列表中,并通过对象初始化创建新的问题。在这样做的同时,我还使用对象初始化语法(嵌套)创建了新的Answer对象 问题 如何设置内部Answer类的Question成员以引用所包含的Question对象?我知道答案的创建点,问题甚至没有完全初始化。但是有没有办法获取外部问题实例,以便我可以将其设置为内部答案 密码 private List questions=new() { 新问题 { Id=1, Text=“测试问题1”, 困难,困难, 答案= { 新答案

我使用集合初始化语法将
问题
项添加到列表中,并通过对象初始化创建新的
问题
。在这样做的同时,我还使用对象初始化语法(嵌套)创建了新的
Answer
对象


问题 如何设置内部
Answer
类的
Question
成员以引用所包含的
Question
对象?我知道
答案
的创建点,
问题
甚至没有完全初始化。但是有没有办法获取外部
问题
实例,以便我可以将其设置为内部
答案


密码
private List questions=new()
{
新问题
{ 
Id=1,
Text=“测试问题1”,
困难,困难,
答案=
{
新答案{Id=1,问题=[?]},
新答案{Id=2,问题=[?]}//这里应该用什么替换[?]呢?
}
} 
};

这是不可能的。但您可以在创建问题后将其设置为所有答案。在使用集合初始化期间,不要将值指定给question属性。在构造函数中,执行以下操作:

foreach(var question in questions)
{
    foreach(var answer in question.Answers)
    {
         answer.Question = question;
    }
}

这是不可能的。但您可以在创建问题后将其设置为所有答案。在使用集合初始化期间,不要将值指定给question属性。在构造函数中,执行以下操作:

foreach(var question in questions)
{
    foreach(var answer in question.Answers)
    {
         answer.Question = question;
    }
}

您不能在集合/对象初始化器中执行此操作,但我认为您首先不应该在那里执行此操作。手写每个答案对应的问题很容易出错。你有时也可能忘记做那件事

我建议您为
Question
中的
Answers
属性添加一个自定义设置器,该设置器还可以设置答案的
Question
属性:

private List<Answer> answers;
public List<Answer> Answers {
    get => answers;
    set {
        // If you feel like it, you can also set the old answers' questions to null

        answers = value;
        foreach (var answer in answers) {
            answer.Question = this;
        }
    }
}
私人列表答案;
公开名单答案{
获取=>答案;
设置{
//如果您愿意,还可以将旧答案的问题设置为空
答案=价值;
foreach(答案中的var答案){
回答:问题=这个;
}
}
}
然后在对象初始化器中,初始化答案列表,而不仅仅是添加到其中:

private List<Question> questions = new()
{
    new Question 
    { 
            Id = 1, 
            Text = "Test Question 1", 
            Difficulty = QuestionDifficulty.Easy, 
            Answers = new List<Answer> // <--- here! 
            {
                new Answer { Id = 1 },
                new Answer { Id = 2 }
            }
    } 
};
private List questions=new()
{
新问题
{ 
Id=1,
Text=“测试问题1”,
困难,困难,

Answers=new List/您不能在集合/对象初始值设定器中执行此操作,但我认为您首先不应该在集合/对象初始值设定器中执行此操作。手写每个答案对应的问题是非常容易出错的。有时您可能也会忘记执行此操作

我建议您为
Question
中的
Answers
属性添加一个自定义设置器,该设置器还可以设置答案的
Question
属性:

private List<Answer> answers;
public List<Answer> Answers {
    get => answers;
    set {
        // If you feel like it, you can also set the old answers' questions to null

        answers = value;
        foreach (var answer in answers) {
            answer.Question = this;
        }
    }
}
私人列表答案;
公开名单答案{
获取=>答案;
设置{
//如果您愿意,还可以将旧答案的问题设置为空
答案=价值;
foreach(答案中的var答案){
回答:问题=这个;
}
}
}
然后在对象初始化器中,初始化答案列表,而不仅仅是添加到其中:

private List<Question> questions = new()
{
    new Question 
    { 
            Id = 1, 
            Text = "Test Question 1", 
            Difficulty = QuestionDifficulty.Easy, 
            Answers = new List<Answer> // <--- here! 
            {
                new Answer { Id = 1 },
                new Answer { Id = 2 }
            }
    } 
};
private List questions=new()
{
新问题
{ 
Id=1,
Text=“测试问题1”,
困难,困难,

Answers=new List//很好的方法!当一个新问题添加到列表中时,甚至可以使用
IList
的自定义实现来设置
Question
属性。@someone是的,如果这样做,您就不再需要
new List
(假设
Answers
在构造函数中初始化),但是我做一个自定义列表实现只是为了这个有点过分:-)这正是我需要的!非常感谢:)@听起来也不错的人。我实际上为
问题
答案
都有子类,所以我认为自定义
类应答列表:IList
也可以合理地创建。Bu现在,我将使用@Sweeper的方法。谢谢:)好的方法!甚至可以在列表中添加新问题时使用
IList
的自定义实现来设置
Question
属性。@someone是的,如果这样做,您就不再需要
新列表了(假设
Answers
是在构造函数中初始化的),但是IMO仅仅为此做一个自定义列表实现有点过分:-)这正是我所需要的!非常感谢:)@听起来也不错的人。我实际上有
问题
答案
的子类,所以我认为自定义
类回答列表:IList
也可以合理地创建。但现在,我将使用@Sweeper的方法。谢谢:)为什么需要这样做?它是c创建将来可能导致错误的冗余数据结构。最好是计算父级而不是存储它。为什么需要这样做?它会创建将来可能导致错误的冗余数据结构。计算父级而不是存储它。