串联两个列表,但保留源对象信息

时间:2019-06-29 16:11:59

标签: c# .net oop

我目前正在研究测验应用程序,并且遇到了一些问题。

我有一个User类,该类被启动,其中包含两个提出的问题列表,一个是他们自己的答案,一个是他们对其他同事的答案。

public class User
    {
        public List<Answer> AAnswers { get; private set; }
        public List<Answer> BAnswers { get; private set; }

        public string Name { get; set; }

        public User()
        {
            Name = "Player";
            AAnswers = new List<Answer>();
            BAnswers = new List<Answer>();
        }

        public User(string name):this()
        {
            Name = name;
        }
}

然后,我有一个名为Quiz的类,其中包含有关活动的许多其他信息。我将把关键信息放进去。

在课堂上,我使用Concat构建另外两个列表,每个用户自己和同事的答案结合在一起。现在,我正在使用一个列表来存储这些列表(AllUserAswers和AllColleagueAnsers),但是,这无法让我访问最初回答该问题的用户。

我尝试将添加User字段添加到Answer类和构造函数中,但是NewtonSoft一直在生成自我引用循环错误,因此我认为这不是明智的做法。 我将如何创建用户列表和答案。我需要使用元组或类似的吗?当我在努力争取想法时。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为有几种方法可以在不过度破坏当前设计的情况下进行操作。

您可以将[JsonIgnore]添加到您的User属性。假设您不需要json来保留用户,那将是最快和最简单的。

另一个快速的解决方案是将Id属性添加到您的User类中。然后,在您的Answer类中,您可以拥有一个UserId属性。

public class User {
    public Guid Id {get;}

    public User() {
        Id = Guid.NewGuid();
    }
}

public class Answer {
    public Guid UserId{get;set;}

    public User User => AllUsers.Single(x => x.Id == UserId);
}

类似的事情可能会起作用。我尚未对其进行测试,它确实取决于您是否可以访问AllUsers或您的Answer类中的某些内容。