竟然一不小心犯了低级错误,数据类型的值类型和引用类型弄混了。

想用list记录下所有的二维数组值,结果发现list里所有的值都是一样的。

值类型和引用类型:

C#数据类型分为两大类:值类型和引用类型。

值类型数据主要有:结构体struct,枚举体enum,布尔型bool,浮点型,整型。

引用类型数据主要有:数组,字符串,接口,委托,类。

值类型和引用类型的区别:

  引用类型继承自System.Object,值类型继承自System.ValueType。

  引用类型保存到内存的堆heap中,值类型保存在内存的堆栈stack中。在.net中,栈的内存是自动释放的,而堆会有垃圾回收器GC来释放。

  引用类型可以派生出新的类型,而值类型不可以。引用类型可以包含null值,而值类型不可以。

  引用类型变量赋值只复制对象的引用,不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。

辨别过程

想用list记录下所有的二维数组值,结果发现list里所有的值都是一样的。

1.错误的使用。只new一次,所有的变量valueLst1 实际上是一个值,同一个地址。

        private void test(){List<int[]> valueLst1 = new List<int[]>();int[] indexAndvalue1 = new int[2];for (int i = 0; i < 10; i++){indexAndvalue1[0] = i;indexAndvalue1[1] = i * 2;valueLst1.Add(indexAndvalue1);}}

valueLst1里所有值都是[9,10]。

2正确。每次重新new

        private void test2(){List<int[]> valueLst2 = new List<int[]>();int[] indexAndvalue2;for (int i = 0; i < 10; i++){
                indexAndvalue2 = new int[2];indexAndvalue2[0] = i;indexAndvalue2[1] = i * 2;valueLst2.Add(indexAndvalue2);}}

valueLst1的值分别是[0,0],[1,2].......

可参考资料:

C# 值类型和引用类型及参数传递C#基础原理拾遗——引用类型的值传递和引用传递C# 参数传递 引用类型与值类型的值传递和引用传递C#中值传递和引用传递

转载于:https://www.cnblogs.com/GISRSMAN/p/4994468.html

c#数据类型的值传递和引用传递--基础拾遗相关推荐

  1. Java值传递与引用传递

    Java面试题: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答案基本上是:值传递 说明:得出这种结论的前提必须是&qu ...

  2. Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?

    来自:沉默王二 在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很 ...

  3. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

  4. Java中传参数--值传递和引用传递

    ** Java中传参数–值传递和引用传递 ** 在Java中,传参数分为值传递和引用传递. 在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数 ...

  5. list修改元素的值_Python 到底是值传递还是引用传递

    我们平时写的 Python 程序中充斥着大量的函数,包括系统自带函数和自定义函数,当我们调用函数时直接将参数传递进去然后坐等接收返回值即可,简直不要太好用.那么你知道函数的参数是怎么传递的么,是值传递 ...

  6. php值传递和java_Java的值传递和引用传递

    形参与实参 我们先来重温一组语法: 形参:方法被调用时需要传递进来的参数,如:func(int a)中的a,它只有在func被调用期间a才有意义,也就是会被分配内存空间,在方法func执行完成后,a就 ...

  7. 面试再问值传递与引用传递,把这篇文章砸给他!

    java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题,首先我们必须认识到这个问题一般是相对函数而言的,也就是java中的方法参数,那么我们先来回顾一下在程序设计语言中有关参数 ...

  8. list修改元素的值_第115天:Python 到底是值传递还是引用传递

    我们平时写的 Python 程序中充斥着大量的函数,包括系统自带函数和自定义函数,当我们调用函数时直接将参数传递进去然后坐等接收返回值即可,简直不要太好用.那么你知道函数的参数是怎么传递的么,是值传递 ...

  9. java的引用传递_Java的值传递和引用传递

    首先来看一段代码: User类: 1 public classUser {2 privateString name;3 4 publicString getName() {5 returnname;6 ...

最新文章

  1. qprocess start怎么判断是否结束_面试结束后,如何判断自己是否有戏?看有无这8大信号!...
  2. Java中迭代列表中数据时几种循环写法的效率比较
  3. angular的路由
  4. 如何开始你的CTF比赛之旅
  5. 在线白板,基于socket.io的多人在线协作工具
  6. Android学习3—电话拨号器
  7. 个人永久性免费-Excel催化剂功能第28波-工作薄瘦身,安全地减少非必要冗余
  8. c++代码好玩_Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)...
  9. 试题 历届试题 翻硬币(贪心)
  10. redis的安装过程基本配置及遇到问题的解决
  11. 可重组合与不相邻组合
  12. JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
  13. 什么是Thymeleaf?
  14. 如何生成PSSM矩阵
  15. 23、Camunda DMN决策初探
  16. Mybatis多表新增
  17. java8对类集合使用 Comparator.comparing 进行排序
  18. python3的基本数据类型_python3基本数据类型
  19. vue导出excel加一个进度条_vue纯前端导出excel表格
  20. java秒换算成时分秒的形式

热门文章

  1. SQLi LABS Less-29
  2. amazon php 空间,如何将PHP图像资源放入Amazon Web Services?
  3. 子文件夹的权限统一于E盘的权限
  4. python 面向对象_多态、内置方法、反射
  5. SD卡在SPI模式下的初始化和详细的代码分析
  6. C#匿名对象在其它方法体内怎么取到相应的值(不想建立对应的类并转化的情况下)?...
  7. 【React教学】通用型DataTable组件——400行内
  8. How browsers work
  9. 周末爬山之圈门-潭柘寺
  10. oracle sql不用distinct去除重复,oracle sql 去重复记录不用distinct如何实现