2012-08-14 81 views
0

这是我的代码:的DataRow抛出NullReferenceException异常

private string[] quizList; 

public string[] getQuizList() 
{  
    Databases.MoodleOCDataSetTableAdapters.QuizTableAdapter ta = new Databases.MoodleOCDataSetTableAdapters.QuizTableAdapter(); 
    Databases.MoodleOCDataSet.QuizDataTable table = new Databases.MoodleOCDataSet.QuizDataTable(); 
    ta.Fill(table); 

    System.Data.DataRow[] row = table.Select("id > 0"); 

    for(int i = 0; i < row.Length; i++)  
     quizList[i] = row[i].ItemArray[2].ToString(); 

    return quizList; 
} 

当我调试,我可以看到该表填满了数据和行也充斥着数据。但是当涉及到for循环时,它总是抛出空引用异常。我的代码有什么问题?谢谢!

+0

你确定每行有三个项目吗? – Oded 2012-08-14 19:10:01

+0

@Oded是的,我确定。这些项目是身份证,课程和名称。在调试窗口中还显示3个项目。 – 2012-08-14 19:11:23

+0

你在你的方法之外声明'quizList'的任何原因?另外,为什么你不通过列名像'row [i] [“name”]获得单元格值。 – banging 2012-08-14 19:14:46

回答

3

内部方法来初始化quizList

quizList = new string[row.Length]; 

,然后运行循环。

内部循环quizList为空,您试图访问它的索引。

所以你的函数应该像

private string[] quizList; 

public string[] getQuizList() 
{  
    Databases.MoodleOCDataSetTableAdapters.QuizTableAdapter ta = new Databases.MoodleOCDataSetTableAdapters.QuizTableAdapter(); 
    Databases.MoodleOCDataSet.QuizDataTable table = new Databases.MoodleOCDataSet.QuizDataTable(); 
    ta.Fill(table); 

    System.Data.DataRow[] row = table.Select("id > 0"); 

    quizList = new string[row.Length]; 

    for(int i = 0; i < row.Length; i++)  
     quizList[i] = row[i].ItemArray[2].ToString(); 

    return quizList; 
} 
+0

谢谢。现在它正在工作。 – 2012-08-14 19:15:13

+0

是的,确定... :) – 2012-08-14 19:16:43

0

这将意味着quizList为空。

0

您试图在初始化之前访问quizList的索引。尝试做这样的事情:

quizList = new String[row.length]; 

在使用它之前。