【问题标题】:Accessing Objects inside lists访问列表中的对象
【发布时间】:2014-01-09 22:17:22
【问题描述】:

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

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

vartrack.Questions[0].MultipleChoice;

这应该返回真还是假? 但由于某种原因,我无法访问 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 'object' 不包含 'MultipleChoice' 的定义,并且找不到接受类型为 'object' 的第一个参数的扩展方法 'MultipleChoice'(您是否缺少使用指令还是程序集引用?)我希望能够访问对象中的信息!编辑:我知道那里的代码没有做任何事情,它在 if 语句中,但为了便于阅读,我将其删除。
  • 认为您可能需要提供更多代码清单在哪里定义了 vartrack?
  • 告诉我们你是如何定义vartrack的。

标签: c# list class object


【解决方案1】:

你的问题在这里:

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

你想要这个:

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

当您从列表中检索项目时......它们是objectobject 没有 MultipleChoice 属性.. 但 QuizQuestions 有。这就是您想要将列表定义为的内容。

【讨论】:

    【解决方案2】:

    您的错误在这里,每次您更改当前实例并将其添加到您的列表时。所以您的列表可能有 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&lt;object&gt; ,则无法访问您的 MultipleChoice 属性,因为 Object 类没有 MultipleChoice 属性。

    【讨论】:

    • 啊,好的,谢谢!只是出于好奇,{ get; 的意义何在?放;一段代码?当我环顾四周时,我看到了它,但我找不到任何地方解释它的作用!谢谢!
    • @darkdan21 它们被称为自动实现的属性。看看这里:msdn.microsoft.com/en-us/library/bb384054.aspx
    猜你喜欢
    • 2015-06-20
    • 2021-05-24
    • 2020-07-08
    • 2017-12-29
    • 2018-05-09
    • 1970-01-01
    • 2020-03-31
    • 2021-06-06
    • 2013-08-02
    相关资源
    最近更新 更多