循环遍历列表并匹配几个条件

时间:2016-11-10 13:24:07

标签: c# asp.net loops if-statement conditional

我正在尝试创建一个对测验进行评分的方法。如果测验问题只有一个正确的答案,它可以正常工作,但我很难处理多个正确的答案。

我首先检查当前问题有多少正确答案。如果它超过1我需要一个检查用户回答的方法是否与正确答案完全匹配。

因此,如果有2个正确答案的问题,并且用户只签入其中1个答案,则他没有得分。

有关检查正确答案的答案数是否与正确答案匹配的方法的任何想法?

我认为LINQ在这里很合适,但我是一个完全的菜鸟。也许将所有正确答案添加到新列表并与.Contains匹配将是一个解决方案?

这些课程如下:

List<Question>

Question-Class
- List<Answers>
    -(string) AnswerText
    -(bool) CorrectAnswer

- List<string> UserAnswerToQuestionText

伪代码:

if (currentquestion has more than one correct answer)
if (UserAnswerText == correctAnswerX && UserAnswerText == correctAnswerY) 

nrofCorrectAnswers++;

2 个答案:

答案 0 :(得分:1)

应该可以用linq

来做到这一点

所以这取决于你如何建模你的问题和答案。

为你的问题上课,然后为你的答案做一个类,你的问题类可以包含一个答案列表:

public class Question
{
    public int QuestionId {get; set;}
    public string QuestionText {get; set;}
    public List<Answer> Answers {get; set;
}

public class Answer
{
    public int AnswerId {get; set;}
    public int QuestionId {get; set;}
    public string AnswerText {get;set;}
}

所以你在问答之间有关系。然后根据给出的答案检查你的答案:

var userAnswers = new List(Answer);
//populate your useranswers here

foreach(var question in Questions)
{
    var answersForQuestion = question.Answers.Select(a=>a.QuestionId == question.Id);
    if (userAnswers.FindAll(ua => ua.QuestionId == questionId).Length == question.Answers.Count())
    {
        //correct amount of answers. check for actual answers
        if (userAnswers.Any(ua => question.Answers.Contains(a=>a.Id == ua.Id))
    //correct answers made
    {
}

如果他们在答案中输入了可能更棘手的问题(即多项选择),则假定答案是固定的

答案 1 :(得分:0)

您能否展示代码以获得更好的答案?

我认为它可能是这样的:

int correctAnswersCount = yourlist.Count(answer => answer.Contais(UserAnswerText));