===================================================
问题描述如下:
====================================================
我定义了一个account类
然后定义了一个account类的数组,现在我想用一个循环来给这个数组赋值,最后发现数组中的所有元素变成最后一个元素的值了
我跟踪了一下程序,发现第一个元素赋值的时候很正常,但是第二个元素赋值的时候,第一个元素就跟着变了。===================================================
代码如下:
=================================================== while (Sdr.Read())
{
string str;
str=Sdr.GetString(0).ToString();
//下面的代码是通过tmp返回一个id为str的account类型的对象
data.Account.GetPPFromId(str, out tmp);
arr[i] = tmp;
i++;
}
==================================================
症状:
==================================================
假设i最大为13
循环完毕以后arr数组中的每一个元素都和arr[13]一样了。
我知道是引用赋值惹的祸,但是不知道该怎么解决,我在account类中自己写了一个clone的类,也不能解决问题。
高手们帮帮忙,我为了这个问题,折腾了一个下午了,到现在还没有吃晚饭,哇哇....
问题描述如下:
====================================================
我定义了一个account类
然后定义了一个account类的数组,现在我想用一个循环来给这个数组赋值,最后发现数组中的所有元素变成最后一个元素的值了
我跟踪了一下程序,发现第一个元素赋值的时候很正常,但是第二个元素赋值的时候,第一个元素就跟着变了。===================================================
代码如下:
=================================================== while (Sdr.Read())
{
string str;
str=Sdr.GetString(0).ToString();
//下面的代码是通过tmp返回一个id为str的account类型的对象
data.Account.GetPPFromId(str, out tmp);
arr[i] = tmp;
i++;
}
==================================================
症状:
==================================================
假设i最大为13
循环完毕以后arr数组中的每一个元素都和arr[13]一样了。
我知道是引用赋值惹的祸,但是不知道该怎么解决,我在account类中自己写了一个clone的类,也不能解决问题。
高手们帮帮忙,我为了这个问题,折腾了一个下午了,到现在还没有吃晚饭,哇哇....
解决方案 »
- C# string cantains
- dataset问题
- 怎样将新建的DataTable写入数据库
- 求一个10亿条以上数据的分页过程
- C#的邮件处理系统
- 关于泛型:在一个非泛型集合类中将对象存入arraylist[],与存入一个泛型的集合类中有那些实质的区别?性能方面?处理方式方面?
- 请教一执行JavaScript时服务器端异常的奇怪问题?
- 要在一个多文档的程序的几个窗口之间共享一个对象
- c#释放dll文件时杀软报毒有什么办法解决
- 高分求救:在C#.net创建Excel以后,如何释放资源
- vs2008在创建web页面的时候,产生一批tmp文件,干什么用的,vs2005的时候好像没有,这个貌似不是主要的,主要的是删不掉!
- C#中的抽象类一定要含有抽象方法吗??很多资料上说必须有,可下面这个例子怎么没有,而且调试正常!!救就兄弟吧!刚刚入门
你出来的如果是引用类型,要么new ,要么Clone,否则就有可能都是一样的。
public static Boolean GetPPFromId(string id, out code.Account YourPP)
{
code.Account tmp = new MyPP.code.Account();
try
{
SqlConnection Myconn = Conn.CreateConn();
Myconn.Open();
StringBuilder str_sql = new StringBuilder("select * from PPUser where user_id='" +id +"'");
SqlCommand Mycomm = new SqlCommand(str_sql.ToString(), Myconn);
SqlDataReader Sdr = Mycomm.ExecuteReader();
Sdr.Read();
tmp.Id = id;
tmp.Name = Sdr.GetString(1);
tmp.Pwd = Sdr.GetString(2);
tmp.Level = Sdr.GetInt32(3);
tmp.Pb = Sdr.GetInt32(4);
tmp.Statue = Sdr.GetInt32(5);
tmp.Headimage = Sdr.GetInt32(6);
tmp.Signed = Sdr.GetString(7);
tmp.Sex = Sdr.GetString(8);
YourPP = tmp;
Myconn.Close();
Mycomm.Dispose();
Sdr.Dispose(); return true;
}
catch (Exception)
{
YourPP = tmp;
return false ;
}
}
setvalue不行哦
1、对code.Account类型,实现ICloneable接口:class Account : ICloneable
{
public int Id { get; set; }
public string Name { get; set; } #region ICloneable Members public object Clone()
{
Account account = new Account();
account.Id = this.Id;
account.Name = this.Name;
return account;
} #endregion
}2、while (Sdr.Read())
{
string str;
str=Sdr.GetString(0).ToString();
//下面的代码是通过tmp返回一个id为str的account类型的对象
data.Account.GetPPFromId(str, out tmp);
arr[i] = tmp.Clone();
i++;
}
不过ACQY的思路对我很有启发,结贴!