Ich habe Probleme beim Hinzufügen von Elementen zu einer Liste. Mein Code lautet wie folgt:

using (var poolDbContext = new PoolContext())
{
    Question Q = new Question();
    Q.Text = "O triunfo do FC Porto frente ao Benfica arrumou de vez as contas do título?";
    Q.Answer.Add ="Sim, o FC Porto vai ser campeão.");


    Q.Answer.Add('Sim, o FC Porto vai ser campeão');
    Q.Answer.Add("Não, o Benfica ainda tem uma palavra a dizer.");
    Q.Answer.Add("Não, o Sporting ainda vai ser campeão.");
    Q.Answer.Add("Não ligo a futebol.");
    poolDbContext.Questions.Add(Q);
    poolDbContext.Answers.Add(Q);
    var count = poolDbContext.SaveChanges();
}

Und hier sind meine .Models.Fragen:

public class Question
{
    public string Text { get; set; }
    public List<Answer> Answer { get; set; }

}

Ich möchte, dass es auf den Models.Frage die Fragen und die 4 Antworten auf diese Fragen erhält. Bitte sag mir, wenn ich etwas falsch mache.

Bearbeiten:

Hier ist die Answer - Klasse:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace PoolManager.Models 
{ 
    public class Answer 
    { 
        public string Questions { get; set; } 
        public string Answers { get; set; } 
        public string Results { get; set; } 
    } 
}
0
dorin munteanu 17 Apr. 2018 im 12:48

4 Antworten

Beste Antwort

Du brauchst so etwas wie

        Q.Answer.Add(new Answer("Sim, o FC Porto vai ser campeão"));

In diesem Fall muss Answer einen Konstruktor mit einer Zeichenfolge haben, oder Sie machen Answer zu einer Zeichenfolge. Verwenden Sie auch für Zeichenfolgen "" und nicht '' // diese Zeichen

Edit: deine antwortklasse sollte so aussehen:

public class Answer
{
    public string Questions { get; set; }
    public string Answers { get; set; }
    public string Results { get; set; }

    public Answer(string text)
    {
         Answers = text;
    }

    public Answer(string question, string answer, string results)
    {
         Questions = question;
         Answers = answer;
         Results = results;
    }
}
0
Lucion 17 Apr. 2018 im 10:07

Initialisieren Sie Ihre Antwortliste im Konstruktor

public class Question
{
    public string Text {get; set; }
    public List<Answer> Answers {get; set; } 


     public Question(){
     Answers=new List<Answer>();
    }
}

Fügen Sie solche neuen Elemente hinzu

Answers.Add (neue Antwort {Eigenschaft1 = Wert1, Eigenschaft2 = Wert2});

0
Abdul Rehman Zafar 17 Apr. 2018 im 09:56

In dieser Zeile:

Q.Answer.Add('Sim, o FC Porto vai ser campeão');

... der Code denkt, Sie versuchen, eine Antwort hinzuzufügen, aber Sie geben ihm tatsächlich ein String-Literal.

Wenn eine Antwort eine Zeichenfolge ist, schlage ich vor, diese Änderung vorzunehmen:

public class Question
{
    public string Text { get; set; }
    public List<string> Answer { get; set; }  //<-- just store strings
}

Wenn eine Antwort tatsächlich komplizierter ist, aber über eine Zeichenfolge initialisiert werden kann, können Sie Folgendes tun:

Q.Answer.Add(new Answer("Sim, o FC Porto vai ser campeão"));

Oder wenn Sie besonders clever sein möchten, können Sie eine implizite Konvertierung einrichten:

public class Answer 
{ 
    public string Answers { get; set; } 

    static public implicit operator Answer(string input)
    {
        var a = new Answer();
        a.Answers = input;
        return a;
    }
} 

Nachdem Sie den impliziten Konvertierungsoperator hinzugefügt haben, können Sie diesen nun wieder verwenden:

Q.Answer.Add("Sim, o FC Porto vai ser campeão");
0
John Wu 18 Apr. 2018 im 02:54

Gestern habe ich es alleine geschafft, der richtige Weg ist es

        using (var poolDbContext = new PoolContext())
        {
            if (poolDbContext.Questions.Count() == 0)
            {
                Question Q = new Question();

                Q.Text = "O triunfo do FC Porto frente ao Benfica arrumou de vez as contas do título?";

                Q.Answers.Add(new Answer { Answers = "Sim, o FC Porto vai ser campeão." });
                Q.Answers.Add(new Answer { Answers = "Não, o Benfica ainda tem uma palavra a dizer." });
                Q.Answers.Add(new Answer { Answers = "Não, o Sporting ainda vai ser campeão." });
               Q.Answers.Add(new Answer { Answers = "Não ligo a futebol." });
                poolDbContext.Questions.Add(Q);
                var count = poolDbContext.SaveChanges();
            }
        }
        return View();
0
dorin munteanu 19 Apr. 2018 im 15:49