C#由Dictionary赋值引发的对引用类型使用的思考

简介: C#由Dictionary赋值引发的对引用类型使用的思考

最近,项目中用到dictionary<string,object>格式来处理数据,当前有一个字典resultData,用来返回页面的所有值,后续对这个字典进行了增加操作,如图:

 

并最终返回页面。

由于我在另外一个页面需要用到第一步获取到的resultData值,因此,我进行了如下操作

Dictionary<string,object> temp=resultData;

但是当我进行操作时,temp的值为包含全部数据的resultData(也就是返回页面的数据)

 

解析:

  分析知道Dictionary属于引用类型,引用类型在赋值时,如果直接赋值,则是将对象的地址进行了赋值,而非值,因此我们需要用如下方法进行赋值操作。

Dictionary<string,object> dicItems=new Dictionary<string,object>(resultData);

此时,我们将先将resultData的值赋值给dicItems,无论后续在对resultData 进行何种操作,都将不会影像dicItems的值。

因此我们需要注意:

引用类型直接赋值的话,得到的是对原对象指向的地址,而并非原对象的值,此时,不论对原对象还是新对象操作,都将影像该地址下的值,使得原对象与新对象的值发生变化。

相关文章
|
6月前
|
存储 Java C#
C# 中的值类型与引用类型:内存大小解析
C# 中的值类型与引用类型:内存大小解析
|
6月前
|
存储 安全 Java
程序与技术分享:C#值类型和引用类型的区别
程序与技术分享:C#值类型和引用类型的区别
50 0
|
2月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
15 0
|
3月前
|
存储 Java C#
C# 中的值类型与引用类型
在 C# 编程中,值类型和引用类型的区别至关重要,直接影响内存管理、性能优化及编程模式选择。值类型直接存储数据(如 `int`、`float`),而引用类型存储数据的引用地址(如 `class`、`string`)。值类型的赋值涉及数据复制,适合小数据量;引用类型仅复制引用,适合大数据量处理但需关注垃圾回收。本文通过具体代码示例详细解析二者的定义、存储方式及性能影响,并提供实战案例分析及易错点避免方法,帮助读者更好地理解和应用。
86 2
|
6月前
|
C# 数据库
C#中的空合并运算符与空合并赋值运算符:简化空值处理
C#中的空合并运算符与空合并赋值运算符:简化空值处理
|
存储 安全 搜索推荐
c#集合_键值对Dictionary & SortedList
在 C# 中,键值对是一种常见的数据结构,可以使用不同的集合类实现。以下是常用的键值对集合类::一种使用哈希表实现的键值对集合。它通过将键哈希为桶号,然后将值存储在桶中进行快速查找。:一种基于数组实现的键值对集合。它会将键值对按照键排序并存储在数组中,以支持快速访问、查找和枚举。:一种使用红黑树实现的键值对集合。它能够按照键的排序进行快速查找,也可以快速地插入和删除键值对,并且该树具备自平衡的特性,使得插入、删除和搜索性能都非常优秀。
163 1
|
存储 C# 图形学
代码解析 C# 引用类型还是值类型
代码解析 C# 引用类型还是值类型
|
存储 C# C语言
C# OOP之五 深入理解值类型和引用类型
C# OOP之五 深入理解值类型和引用类型
46 0
|
7月前
|
开发框架 .NET C#
C# Dictionary<string, string> 对key做筛选
C# Dictionary<string, string> 对key做筛选
78 2
|
7月前
|
C#
C# 运算符详解:包含算术、赋值、比较、逻辑运算符及 Math 类应用
运算符用于对变量和值执行操作。在C#中,有多种运算符可用,包括算术运算符、关系运算符、逻辑运算符等。
87 1