Array.Copy()的疑惑 this is only shallow copy , not copy your object , just Pointer 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 UPhttp://chs.gotdotnet.com/quickstart/aspplus/default.aspx 是shallow copy 则应该会起作用啊,搞不懂。 看看ItemArray都做了什么就明白了:)public object[] get_ItemArray(){ int num2; int num1 = this.Table.Columns.Count; object[] objArray1 = new object[((uint) num1)]; //得到的是一个拷贝 for (num2 = 0; (num2 < num1); num2 += 1) //datarow中没有一个 { //所谓这么个数组保存值 objArray1[num2] = this[num2]; } return objArray1;}public object[] ItemArray{ get { int num2; int num1 = this.Table.Columns.Count; object[] objArray1 = new object[((uint) num1)]; for (num2 = 0; (num2 < num1); num2 += 1) { objArray1[num2] = this[num2]; } return objArray1; } set { DataColumn column1; int num2; this.BeginEdit(); DataColumnChangeEventArgs args1 = new DataColumnChangeEventArgs(); DataColumnCollection collection1 = this.Table.Columns; if (collection1.Count < value.Length) { throw ExceptionBuilder.ValueArrayLength(); } int num1 = value.Length; for (num2 = 0; (num2 < num1); num2 += 1) { if (value[num2] != null) { column1 = collection1[num2]; args1.Initialize(this, column1, value[num2]); this.Table.RaiseColumnChanging(this, args1); column1[this.GetProposedRecordNo()] = args1.ProposedValue; this.Table.RaiseColumnChanged(this, args1); } } this.EndEdit(); }} shallow copy 是浅拷贝 ,不是深拷贝, 你可以参考 <<c# essential >> to redbb(....Dotneter....) :您说的那本书,俺没有看过,以前看过C++的,记得浅拷贝指直复制资源的引用而不重新分配内存:例如,只是将指针指向同一内存,而不是分配新内存;类似于传递引用。而深拷贝则相反,类似于C++的拷贝构造函数。那么在这里,看看reflector后的代码,我觉得如果说这里是深拷贝或浅拷贝的话,我倒觉得这里应该是一个所谓”深拷贝“,即Array.Copy到的数组已经不是datarow的那个了(其实datarow里也没有:),而是重新分配了的内存object[] objArray1 = new object[((uint) num1)]; 也许我记错了,欢迎拍板砖,谢谢指教! 是啊,如果是深拷贝,那倒是可以理解的。micropentium6(小笨) 的代码中显然使用了深拷贝,要真是如此那我也只有认了。 呵呵,那可不是我的代码,那是反编译system.data.dll的结果:) bin\debug中的数据库和根目录上的数据库(ACCESS) 转换Unicode、UTF-8、ANSI格式 你好!请教点关于winform发票打印的问题! 使用c# Socket开发软件产品,需要在Socket程序里注意哪些技术方面的处理. 能否让style的目标类型,指定多个类型? 版主啊,把我信誉分还给我~ c#中使用多线程访问 winform中控件的若干问题 会者不难,大家帮我看看 工作流管理系统解决方案. .Net开发轻便的WinForm程序 radiobuttonlist问题,求教!!!! 装上Vs2005,散分并求有关 C# Winform 的书或教程。
http://chs.gotdotnet.com/quickstart/aspplus/default.aspx
public object[] get_ItemArray()
{
int num2;
int num1 = this.Table.Columns.Count;
object[] objArray1 = new object[((uint) num1)]; //得到的是一个拷贝
for (num2 = 0; (num2 < num1); num2 += 1) //datarow中没有一个
{ //所谓这么个数组保存值
objArray1[num2] = this[num2];
}
return objArray1;
}
public object[] ItemArray
{
get
{
int num2;
int num1 = this.Table.Columns.Count;
object[] objArray1 = new object[((uint) num1)];
for (num2 = 0; (num2 < num1); num2 += 1)
{
objArray1[num2] = this[num2];
}
return objArray1;
}
set
{
DataColumn column1;
int num2;
this.BeginEdit();
DataColumnChangeEventArgs args1 = new DataColumnChangeEventArgs();
DataColumnCollection collection1 = this.Table.Columns;
if (collection1.Count < value.Length)
{
throw ExceptionBuilder.ValueArrayLength();
}
int num1 = value.Length;
for (num2 = 0; (num2 < num1); num2 += 1)
{
if (value[num2] != null)
{
column1 = collection1[num2];
args1.Initialize(this, column1, value[num2]);
this.Table.RaiseColumnChanging(this, args1);
column1[this.GetProposedRecordNo()] = args1.ProposedValue;
this.Table.RaiseColumnChanged(this, args1);
}
}
this.EndEdit();
}
}
您说的那本书,俺没有看过,以前看过C++的,记得浅拷贝指直复制资源的引用而不重新分配内存:例如,只是将指针指向同一内存,而不是分配新内存;类似于传递引用。而深拷贝则相反,类似于C++的拷贝构造函数。
那么在这里,看看reflector后的代码,我觉得如果说这里是深拷贝或浅拷贝的话,我倒觉得这里应该是一个所谓”深拷贝“,即Array.Copy到的数组已经不是datarow的那个了(其实datarow里也没有:),而是重新分配了的内存object[] objArray1 = new object[((uint) num1)]; 也许我记错了,欢迎拍板砖,谢谢指教!