
请教关于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"
主要目的就在于弄一个列表中的项的副本出来,然后赋值另外使用,但不改变列表中那个项的属性值 展开
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"
主要目的就在于弄一个列表中的项的副本出来,然后赋值另外使用,但不改变列表中那个项的属性值 展开
4个回答
展开全部
这个是肯定会影响的。为什么要不影响?如果非要不影响的话,可以考虑用结构struct,结构是栈分配的,函数间会传递副本,互不影响,但数据量大时影响效率。或可使用 MemberwiseClone 来生成个新的副本,但一般需要做其它操作,否则一般是浅表副本,内部的引用对象还是存在修改的可能。
追问
这个方法怎么调用的?不知道如何实现啊...本人没学多久
追答
百度一下, 这个资料很多的, 不过平时不常用.
展开全部
然后我有一个List<classA> caList的实例
如果我要取其中一个项
classA ca =new class(); // 这个实例的ca 跟列表没有任何关系。
ca=caList[0]; // 上一行的实例被抛弃,ca指向了列表中的第一个。
如果我要取其中一个项
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才是复制的,独立的,跟列表没有任何关系的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不影响就要用struct,否则去的时候clone一个,或者序列化反序列化一个
更多追问追答
追问
clone怎么使?没用过
追答
你用序列化反序列化好了,这个复制对象最简单
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果仅仅是要通过其它的数据源来决定类里的属性值,而你觉得一个一个属性赋值太麻烦的话,可以通过反射来遍历所有类里的属性,然后通过一个方法来设置属性值
代码如下:
Type yo = ClassA对象.GetType();
PropertyInfo[] yoo = yo.GetProperties();
for(int i = 0; i < yoo.Length; ++i)
yoo[i].SetValue(ClassA对象, caList[i], null);
代码如下:
Type yo = ClassA对象.GetType();
PropertyInfo[] yoo = yo.GetProperties();
for(int i = 0; i < yoo.Length; ++i)
yoo[i].SetValue(ClassA对象, caList[i], null);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询