Объединение двух списков, но сохранение информации об объекте источника - PullRequest
0 голосов
/ 29 июня 2019

Я сейчас работаю над приложением для викторины и столкнулся с небольшой проблемой.

У меня есть пользовательский класс, который инициируется и содержит два списка задаваемых вопросов, один из их собственных ответов и один для их ответов относительно других коллег.

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 продолжал генерировать мне ошибку Self-referencerencing loop, поэтому я думаю, что это нецелесообразная практика. Как бы я мог создать список пользователей и ответов. Нужно ли использовать Tuple или подобное? Как я борюсь за идеи.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 29 июня 2019

Думаю, есть пара способов сделать это, не слишком огорчая ваш текущий дизайн.

Вы можете добавить [JsonIgnore] к вашей собственности пользователя. Это было бы самым быстрым и простым, если бы вам не понадобился 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 или что-то в вашем классе ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...