在代码运行时从头开始创建数组

本文关键字:创建 数组 从头开始 运行时 代码 | 更新日期: 2023-09-27 18:05:06

我试图通过数组创建一个列表:

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;
}

我一直得到一个对象null错误,我知道我必须错过一些完全明显的东西,我只是没有看到。我需要以其他方式声明新数组吗?

在代码运行时从头开始创建数组

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

在。net框架中有多个Application类,似乎没有一个与你的代码匹配,所以下面的例子将简单地假设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 - 1替换为i < x,并且行为完全相同。

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