c#里面DataTable对象的赋值,难道不是引用的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#里面DataTable对象的赋值,难道不是引用的?相关的知识,希望对你有一定的参考价值。
DataTable dt = new DataTable();
DataTable dtCopy = new DataTable();
DataSet ds = new DataSet();
ds.ReadXml(@"C:\Documents and Settings\wenxi\Desktop\wenxi.xml");
dt = ds.Tables[0];
dtCopy = dt;
dt = null;
之前提了一个问题,注意这一次是dtCopy = dt;直接赋值,但是当我把dt设为null的时候,调试发现dtCopy里面依然还是有值,为什么?
MarshalByValueComponent本身是一个对象,所以是引用类型,但是这个类是在远程处理的时候被按值封装的,比如DataTable就是这个类派生的
按值封装的意思就是说,远程处理的时候,从服务器传递到客户端的该类型的对象不是原来服务器上的那个对象的引用,而是按值封装进行序列化和反序列化之后的另一个对象,这个对象相当于服务器端该对象在客户端的一个副本 参考技术A dt = ds.Tables[0];
dt指向一个地址空间,这个地址空间也被ds.Tables[0]指向 我们记为地址空间A 他是有数据的
dtCopy = dt;
dtCopy也指向地址空间A
dt = null
dt指向一个地址空间 这个地址空间为NULL 我们记为B
这时候 dtCopy指向的还是地址空间A本回答被提问者采纳 参考技术B 把dt设为null之前 dtCopy已经赋值,所以dt的数据在dtCopy里面dtCopy = dt; dt = null; 参考技术C 因为 它不是引用类型
求问 C#如何将json字符串转为datatable 求详细解答
没必要转为datatable啊,可以转为List,定义一个实体类用newtonsoft.json转, datatable其实大多用于数据库出来的数据,一般情况用不到的,非要转为datatable也可以,new一个datatable出来,循环json里面的每一条数据,一条一条加进datatable集 参考技术A 需要引用newtonsoft.json这个dll吧,用这个解析json字符串 参考技术B //序列化json = Newtonsoft.Json.JsonConvert.SerializeObject(dt);
//反序列化
dt = Newtonsoft.Json.JsonConvert.DeserializeObject(list, typeof(DataTable)) as DataTable;
以上是关于c#里面DataTable对象的赋值,难道不是引用的?的主要内容,如果未能解决你的问题,请参考以下文章
.NET里面datatable.rows[i]可以直接转换为DataRow吗?是否要先new一个DataRow,然后再依次赋值?
求问 C#如何将json字符串转为datatable 求详细解答
c# winform从数据库里面取出数据放到datatable里