黑马程序员技术交流社区

标题: 一个类的数组问题 [打印本页]

作者: 贰的23次方    时间: 2014-3-19 11:05
标题: 一个类的数组问题
本帖最后由 贰的23次方 于 2014-3-19 12:03 编辑
  1. <p> </p><p>public class InfoCategory
  2.     {
  3.         public Guid ID { set; get; }
  4.         public string InfoName { set; get; }
  5.   }</p><p>//数据库中插入了几条记录,然后用方法读取记录时出现异常“对象为引用到实例”</p><p>//出错代码如下,粗体</p><div class="blockcode"><blockquote> public InfoCategory[] GetInfo(string category)
  6.         {
  7.             string sql="select ID,InfoName from T_InfoCategory where InfoCategory=@InfoCategory";
  8.             DataTable table = SqlHelper.ExecuteDataTable(sql, new SqlParameter("@InfoCateGory",category));
  9.             InfoCategory[] infoCategorys = new InfoCategory[table.Rows.Count];
  10.             for(int i=0;i<table.Rows.Count;++i)
  11.             {
  12.                 DataRow row=table.Rows[i];
  13.                

  14.                 <strong>infoCategorys[i].ID = (Guid)row["ID"];
  15.                 infoCategorys[i].InfoName = (string)row["InfoName"];</strong>
  16.                

  17.             }
  18.             return infoCategorys;
  19.         }
复制代码
//后更正如下,可以运行。
//代码随可以运行,但是对于原因不清楚,希望大家能给我讲讲,这两种写法为什么不同


  1. public InfoCategory[] GetInfo(string category)
  2.         {
  3.             string sql="select ID,InfoName from T_InfoCategory where InfoCategory=@InfoCategory";
  4.             DataTable table = SqlHelper.ExecuteDataTable(sql, new SqlParameter("@InfoCateGory",category));
  5.             InfoCategory[] infoCategorys = new InfoCategory[table.Rows.Count];
  6.             for(int i=0;i<table.Rows.Count;++i)
  7.             {
  8.                 DataRow row=table.Rows[i];
  9.                 <strong>InfoCategory info = new InfoCategory();
  10.                 info.ID = (Guid)row["ID"];
  11.                 info.InfoName = (string)row["InfoName"];
  12.                 infoCategorys[i] = info;</strong>
  13.             }
  14.             return infoCategorys;
  15.         }
复制代码

  }

作者: 贰的23次方    时间: 2014-3-19 11:07
代码中不可以显示粗体错误代码infoCategorys[i].ID = (Guid)row["ID"];infoCategorys[i].InfoName = (string)row["InfoName"];
作者: mdb    时间: 2014-3-19 11:29
第一段代码: infoCategorys[i].InfoName = (string)row["InfoName"];
这是因为前面已经初使化数组时,infoCategorys数组的数量虽然已经确定,但是数组里的值是NULL(infoCategorys[i]是NULL),所以直接赋值时会报错,而下面正确的代码:InfoCategory info = new InfoCategory();是重新NEW一个对像,这样再把这个类直接放到数组里就没问题了。
作者: 贰的23次方    时间: 2014-3-19 11:45
mdb 发表于 2014-3-19 11:29
第一段代码: infoCategorys.InfoName = (string)row["InfoName"];
这是因为前面已经初使化数组时,infoCat ...

InfoCategory[] infoCategorys = new InfoCategory[table.Rows.Count];这一句代码有没有给数组分配内存空间呢?
作者: mdb    时间: 2014-3-19 11:59
贰的23次方 发表于 2014-3-19 11:45
InfoCategory[] infoCategorys = new InfoCategory[table.Rows.Count];这一句代码有没有给数组分配内存空 ...

空间是分配了,但是InfoCategory[]里面的值都是NULL,例如InfoCategory[0] InfoCategory[1] InfoCategory[2] 这些是值都是NULL。
作者: 贰的23次方    时间: 2014-3-19 12:03
mdb 发表于 2014-3-19 11:59
空间是分配了,但是InfoCategory[]里面的值都是NULL,例如InfoCategory[0] InfoCategory[1] InfoCategory ...

恩恩,谢谢回答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2