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

MrC*_*der 0 c# asp.net arrays dataset

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*ins 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
}
Run Code Online (Sandbox Code Playgroud)

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

最后,如果有可能返回null,则应该为所有访问器引入检查.例如,如果item["Name"]返回null,则调用item["Name"].ToString()equivelant to calling null.ToString(),这也将导致a NullReferenceException.