0

我正在尝试通过这样的数组创建一个列表:

private Application[] GetApps()
{
DataSet ds = new Dataset();
string query = "query";
ds = GetData(query);

var appList = new Application[ds.Tables[0].Rows.Count];

for(var i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
                DataRow item = ds.Tables[0].Rows[i];

                appList[i].Name = item["Name"].ToString();
                appList[i].Confidentiality = int.Parse(item["Conf"].ToString());
                appList[i].Id = item["ID"].ToString();
}
return appList;
}

我不断收到一个对象空错误,我知道我必须遗漏一些我没有看到的完全明显的东西。我是否需要以其他方式声明新数组?

4

1 回答 1

6

当您创建时appList,您只是在创建数组本身。.NET 不会自动使用 Application 对象填充数组以供您操作。您需要创建一个新的 Application 对象,并在该对象上设置属性,然后您可以将该对象分配给数组。

Application.NET 框架中有多个类,似乎没有一个与您的代码匹配,因此下面的示例将简单地假设这Application是您自己设计的自定义类型。

for(var i = 0; i < ds.Tables[0].Rows.Count; i++)
{
    DataRow item = ds.Tables[0].Rows[i];

    Appliction app = new Application();
    app.Name = item["Name"].ToString();
    app.Confidentiality = int.Parse(item["Conf"].ToString());
    app.Id = item["ID"].ToString();
    appList[i] = app
}

顺便说一句,请注意您可以替换i <= x - 1i < x并且行为完全相同。

最后,如果有可能返回 null,您应该对所有访问器进行检查。例如,如果item["Name"]返回 null,则调用item["Name"].ToString()等同于调用null.ToString(),这也将导致NullReferenceException.

于 2013-03-21T20:49:19.480 回答