无法将项目添加到列表中

时间:2018-04-17 09:48:39

标签: c# asp.net .net asp.net-mvc

我在将项目添加到列表时遇到问题,以下是我的代码:

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();
}

这是我的.Models.Questions:

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

}

我希望它能在Models.Question上收到问题以及这些问题的4个答案。 如果我做错了,请告诉我。

修改

这是Answer - 类:

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; } 
    } 
}

4 个答案:

答案 0 :(得分:0)

你需要像

这样的东西
        Q.Answer.Add(new Answer("Sim, o FC Porto vai ser campeão"));

在这种情况下,Answer需要有一个带字符串的构造函数,或者你将Answer作为一个字符串。也用于字符串使用&#34; &#34;而不是&#39; &#39; //这些是用于字符

编辑: 你的答案课应该是这样的:

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;
    }
}

答案 1 :(得分:0)

在构造函数

中初始化答案列表
public class Question
{
    public string Text {get; set; }
    public List<Answer> Answers {get; set; } 


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

添加像这样的新项目

Answers.Add(new Answer {property1 = value1,property2 = value2});

答案 2 :(得分:0)

在这一行:

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

...代码认为您正在尝试添加答案,但实际上您正在给它一个字符串文字。

如果答案字符串,我建议进行此更改:

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

如果答案实际上更复杂,但可以从字符串初始化,则可以执行以下操作:

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

或者,如果您想要特别聪明,可以设置隐式转换:

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

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

添加隐式转换运算符后,您现在可以再次使用它:

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

答案 3 :(得分:0)

昨天我设法独自完成,正确的做法是

        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();