请教关于C#引用类型类实例的问题

假如有一个自定义类publicclassclassA{publicstringstrA;publicstringstrB;publicstringstrC;}然后我有一个... 假如有一个自定义类
public class classA
{
public string strA;
public string strB;
public string strC;
}

然后我有一个List<classA> caList的实例
如果我要取其中一个项
classA ca =new class();
ca=caList[0];

那么当我给这个ca实例某个属性赋值的时候如何不影响caList[0]的属性?

例如我
ca.strB="other";
的时候,那么
caList[0].strB=="ohter"
主要目的就在于弄一个列表中的项的副本出来,然后赋值另外使用,但不改变列表中那个项的属性值
展开
 我来答
FantasyChump
2012-09-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
这个是肯定会影响的。为什么要不影响?如果非要不影响的话,可以考虑用结构struct,结构是栈分配的,函数间会传递副本,互不影响,但数据量大时影响效率。或可使用 MemberwiseClone 来生成个新的副本,但一般需要做其它操作,否则一般是浅表副本,内部的引用对象还是存在修改的可能。
追问
这个方法怎么调用的?不知道如何实现啊...本人没学多久
追答
百度一下, 这个资料很多的, 不过平时不常用.
cy_paul
2012-09-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
然后我有一个List<classA> caList的实例
如果我要取其中一个项
classA ca =new class(); // 这个实例的ca 跟列表没有任何关系。
ca=caList[0]; // 上一行的实例被抛弃,ca指向了列表中的第一个。
更多追问追答
追问
嗯,我就是想把列表中第一个复制一个副本出来,改值而不影响列表
追答
复制的放在,那太简单了:
classA temp = new classA();
temp.strA = list[0].strA;
temp.strB = list[0].strB;
temp.strC = list[0].strC;
这样的temp才是复制的,独立的,跟列表没有任何关系的
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
草薙在
2012-09-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
不影响就要用struct,否则去的时候clone一个,或者序列化反序列化一个
更多追问追答
追问
clone怎么使?没用过
追答
你用序列化反序列化好了,这个复制对象最简单
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Aupryyyyyyyyyy
2012-09-04
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
如果仅仅是要通过其它的数据源来决定类里的属性值,而你觉得一个一个属性赋值太麻烦的话,可以通过反射来遍历所有类里的属性,然后通过一个方法来设置属性值
代码如下:

Type yo = ClassA对象.GetType();
PropertyInfo[] yoo = yo.GetProperties();
for(int i = 0; i < yoo.Length; ++i)
yoo[i].SetValue(ClassA对象, caList[i], null);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式