访问列表中的对象

时间:2014-01-09 22:17:22

标签: c# list class object

我正在制作一个'测验类型'程序,其中的问题从文件中读取,存储为对象,然后存储在列表中。 我不知道如何检查它们是否已正确存储,所以我也会发布存储代码。

我的问题是我似乎无法访问我存储的任何数据。 例如:

vartrack.Questions[0].MultipleChoice;

这应该返回true还是false? 但由于某种原因,我无法访问MultipleChoice数据。

我的代码如下: 班级代码:

public class QuizQuestions
{
    public bool MultipleChoice = false;
    public string questiontext;
    public static List<string> Answers = new List<string>();
    public bool correct;
    public QuizQuestions(string QuestionText)
    {
        questiontext = QuestionText;
    }
    public void AddAnswer(string answer)
    {
        Answers.Add(answer);
        if (Answers.Count > 1)
        {
            MultipleChoice = true;
        }
    }
}

其余代码:

foreach(string currentline in vartrack.QuestionLines)
            {
                if (Question)
                {
                    current = new QuizQuestions(currentline);
                    vartrack.Questions.Add(current);
                    Question = false;
                }
                else
                {
                    if (currentline == "#")
                    {
                        Question = true;
                    }
                    else
                    {
                        if (current != null)
                        {
                           current.AddAnswer(currentline);
                        }
                    }
                }
            }
            int num;
            while (vartrack.Questions.Count > inputNoOfQs.Value)
            {
                Random random = new Random();
                num = random.Next(0, vartrack.Questions.Count);
                vartrack.Questions.RemoveAt(num);
            }
            vartrack.Questions[0].MultipleChoice;

由于

编辑1: Vartrack在这里定义:

    public static class vartrack
{
    public static string[] QuestionSets;
    public static List<string> QuestionLines = new List<string>();
    public static List<object> Questions = new List<object>();

}

2 个答案:

答案 0 :(得分:4)

你的问题在这里:

public static List<object> Questions = new List<object>();

你想要这个:

public static List<QuizQuestions> Questions = new List<QuizQuestions>();

从列表中检索项目时,它们为objectobject没有MultipleChoice属性..但是QuizQuestions。这就是你要将列表定义为。

答案 1 :(得分:0)

您的错误就在这里,每次更改当前实例并将其添加到您的列表中。所以您的列表可能有20个问题,但如果您这样做,它们将是同一个问题:

current = new QuizQuestions(currentline);
vartrack.Questions.Add(current);

相反,你应该创建一个像这样的全新实例:

var question = new QuizQuestions(currentline);
vartrack.Questions.Add(question);
current = question;

我建议你让MultipleChoice这样的房产:

public bool MultipleChoice { get; set; }

您的列表定义错误。

改变这个:

public static List<object> Questions = new List<object>();

对此:

public static List<QuizQuestions> Questions = new List<QuizQuestions>();

如果您定义List<object>,则无法访问MultipleChoice属性,因为Object类没有MultipleChoice属性。