保留一个引用类型的副本不变

fisea 2010-10-11 12:47:16
比如:
lst2是lst1的副本,但是我想改变lst1时lst2不变。引用类型不好做。
private void(List<User> lst1,List<User> lst2)
{

}
...全文
78 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fisea 2010-10-11
  • 打赏
  • 举报
回复
可是出现这个问题:
'System.ICloneable' is inaccessible due to its protection level
代码如下:
public class Objects:System.ICloneable
{
public string ObjectId
{ get; set; }

public string Dat_ObjectId
{ get; set; }

public string Rep_ObjectId
{ get; set; }

public string Fol_ObjectId
{ get; set; }

public int ObjectType
{ get; set; }
public string ParentId
{ get; set; }
public string ObjectName
{
get;
set;
}
public bool Inherited
{ get; set; }
public string Description
{ get; set; }
public int DataSrcType
{ get; set; }
public string LinkName
{ get; set; }
public string LinkPassword
{ get; set; }
public string ServerName
{ get; set; }
public bool? IsFlag
{ get; set; }




public object Clone()
{
return new Objects() {
ObjectId=this.ObjectId,
Dat_ObjectId=this.Dat_ObjectId,
Rep_ObjectId=this.Rep_ObjectId,
Fol_ObjectId=this.Fol_ObjectId,
ObjectType=this.ObjectType,
ParentId=this.ParentId,
ObjectName=this.ObjectName,
Inherited=this.Inherited,
Description=this.Description,
DataSrcType=this.DataSrcType,
LinkName=this.LinkName,
LinkPassword=this.LinkPassword,
ServerName=this.ServerName,
IsFlag=this.IsFlag
};
}
}
[Quote=引用 1 楼 wuyazhe 的回复:]
这就是为什么要搞出个浅表复制和深度复制概念了。
浅表复制是复制引用,深度复制是根据list/array中每个对象创建副本,例如调用Clone或重新构造一个对象,2个对象是不同的,但值一样,仅此而已。例如:

C# code

public static void Test()
{
//定义2个对象模拟一下
List<User> list1 = new List<Us……
[/Quote]
大飞飞虫 2010-10-11
  • 打赏
  • 举报
回复
克隆一个副本出来,
lst2,lst1各指一个
小童 2010-10-11
  • 打赏
  • 举报
回复
受教。。。
兔子-顾问 2010-10-11
  • 打赏
  • 举报
回复
这就是为什么要搞出个浅表复制和深度复制概念了。
浅表复制是复制引用,深度复制是根据list/array中每个对象创建副本,例如调用Clone或重新构造一个对象,2个对象是不同的,但值一样,仅此而已。例如:

public static void Test()
{
//定义2个对象模拟一下
List<User> list1 = new List<User>(new User[] { new User { Name = "aaa", Password = "111" }, new User { Name = "bbb", Password = "222" } });
List<User> list2 = new List<User>();
foreach (User item in list1)
{
list2.Add(item.Clone() as User);
}
//list2随便修改吧。
}

public class User : ICloneable
{
public string Name { get; set; }
public string Password { get; set; }

#region ICloneable 成员

public object Clone()
{
return new User() { Name = this.Name, Password = this.Password };//创建一个副本
}

#endregion
}

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧