为什么这个foreach循环不起作用?

时间:2013-12-06 19:41:25

标签: c# asp.net sql

我创建了一个类实体,我正在尝试使用数组填充其中一个属性,方法如下:

Usuario[] arrayusers = new Usuario[contador];
int i = 0;
foreach (DataRow dr in dt.Rows)
{
    arrayusers[i].Celular = dr["CELULAR"].ToString();
    i++;
}

它返回错误“对象引用未设置为对象的实例”。那是为什么?

我尝试将我创建的类更改为字符串数组并且它有效...

string[] stringx = new string[contador];
int i = 0;
foreach (DataRow dr in dt.Rows)
{
    stringx[i] = dr["CELULAR"].ToString();
    i++;
}

这是一篇IT术语论文!

2 个答案:

答案 0 :(得分:8)

您只定义了一个数组arrayusers,其所有元素都设置为null。您必须实例化每个数组项:

foreach (DataRow dr in dt.Rows)
{
    arraysers[i] = new Usuario(); //<<<<<<<<<<  here
    arrayusers[i].Celular = dr["CELULAR"].ToString();
    i++;
}
  

为什么它适用于字符串数组?

因为您没有访问该元素的任何属性/方法。而是在循环中为它分配一个新的字符串项。在进入循环之前它是null。尝试类似:

string[] stringx = new string[contador];
int i = 0;
foreach (DataRow dr in dt.Rows)
{   
    Console.WriteLine(stringx[i].Length); //<<<< Exception here
    stringx[i] = dr["CELULAR"].ToString();
    i++;
}

答案 1 :(得分:0)

您确定arrayusersdt.Rows的大小相同吗?此外,在我分配之前,我没有看到您arrayusers[i]初始化null的位置。

应该是这样的:

Usario tmp = new Usario();
tmp.Celular = dr["CELULAR"].ToString();
arrayUsers[i] = tmp;