最近开发中遇到的问题:
我有ExportLibraryList表,里面数据有100多个字段,现在是要做一个步骤是,新实例化一个ExportLibraryList对象,只要改变里面2个字段属性
我开始这样做的【错误方式】
ExportLibraryList sl = ExportLibraryListData.Find(delegate(ExportLibraryList obj) { return obj.Id.ToString() == e.CommandArgument.ToString(); });
监听:sl.RecordState=2;
ExportLibraryList shadow = new ExportLibraryList();
shadow=sl
shadow.RecordState=3
做到这一步的时候,我发现sl.RecordState=3了,我很诧异。不明白,于是我就问其他IT朋友,几个没有解决,但是其他有一个觉得跟指针有啥关系吧!于是我明白了
修改版本【正确方式】
ExportLibraryList sl = ExportLibraryListData.Find(delegate(ExportLibraryList obj) { return obj.Id.ToString() == e.CommandArgument.ToString(); });
ExportLibraryList shadow = new ExportLibraryList();
System.Reflection.PropertyInfo[] info = sl.GetType().GetProperties();
foreach (System.Reflection.PropertyInfo property in info)
{
shadow.GetType().GetProperty(property.Name).SetValue(shadow,
sl.GetType().GetProperty(property.Name).GetValue(sl, null), null);
}
这样做不管你修改shadow都不会改变sl。
但是我还是不知道啥原因,暂且先记录吧