2014-01-09 74 views
0

我正在製作一個'測驗類型'程序,其中問題從文件中讀取,作爲對象存儲並存儲在列表中。 我不知道如何檢查它們是否被正確存儲,所以我也會發布存儲代碼。在列表中訪問對象

我的問題是,我似乎無法訪問我存儲的任何數據。 例如:

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; 

由於

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

} 
+1

您不存儲任何變量。你只是隨機地調用方法。所以,你不能訪問它們,因爲你沒有嘗試。 –

+0

我已經刪除了我的答案,因爲它不是問題。你得到的錯誤究竟是什麼?你期望什麼,會發生什麼? – doorstuck

+0

錯誤是: 錯誤2'對象'不包含'MultipleChoice'的定義,並且沒有找到接受類型'object'的第一個參數的擴展方法'MultipleChoice'(您是否缺少using指令或程序集引用?) 我希望能夠訪問對象中的信息! 編輯:我知道那裏的代碼沒有做任何事情,它是在if語句中,但我爲了便於閱讀而將其刪除。 – darkdan21

回答

3

你的問題是在這裏:

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

你想這樣的:

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

當你檢索列表項..他們是objectobject沒有MultipleChoice屬性..但是QuizQuestions沒有。所以這就是你想要定義你的列表。

+0

輝煌,謝謝! 我假設它是數據類型! – darkdan21

0

你的錯誤是在這裏,每次你改變當前實例,並將其添加到您的list.So您的名單可能有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>,你不能因爲Object類沒有一個MultipleChoice屬性來訪問您的MultipleChoice財產。

+0

啊,好的,謝謝! 出於好奇,{get;組; }一段代碼? 當我四處張望時,我看到了它,但我找不到解釋它做了什麼! 謝謝! – darkdan21

+0

@ darkdan21它們被稱爲自動實現的屬性。看看這裏:http://msdn.microsoft.com/en-us/library/bb384054.aspx –