【C#本质论 三】更多数据类型

上篇博客介绍了基本的数值类型,以及字符、字符串的使用方式,本篇博客详细介绍下更多的常用数据类型:元组、数组,并且介绍下可空修饰符以及值类型和引用类型的区别

元组

元组允许在一个语句中完成所有变量的赋值并且允许每一项都有不同的数据类型,在我看来元组更像是一个阉割版本的类,因为我们这么做的时候通过是因为这些变量存在某些业务关系,但是它又不需要像类那样重,需要有很多方法什么的
在这里插入图片描述
元组的使用方式多种多样,既支持显示、又支持隐式变量声明,在5中还可以将元组数据赋值给一个元组类型,不仅如此,元组不单支持具名访问还支持8中不具名的使用item顺序访问,以及9中的弃元操作。
在这里插入图片描述

数组

数组再熟悉不过了,不管是C,C#,Java基本啥都有,那我就聊点儿不一样的。在赋值的时候,要么开辟内存空间,要么将地址的引用赋给数组变量。
在这里插入图片描述
需要注意的是,如果指定了大小,并且包含了元素,那么元素个数一定要和大小一致。若只是指定了大小但未分配值,则每个元素使用默认值。引用类型,为null; 数值类型为0; bool类型为false; char类型为\0

多维数组和交错数组

多维数组是一个n*m的矩形,每一维的大小必须一致。而交错数组表示在一个数组里添加了一堆数组:

private static void Main(string[] args)
        {
            int[][] aa = { new int[] { 1, 0}, new int[] { 0, 2, 0 }, new int[] { 1, 2, 1,5 } };
            System.Console.WriteLine(aa[1][0]);  //返回true
            System.Console.ReadKey();
        }

每一维的大小可以不一致。

数组方法的使用

包括一些常用方法:Sort用于排序,BinarySearch用于先排序后获取指定元素的索引,目标元素不存在返回索引,值得特别注意的是:

  • Length方法:如果是多维数组会返回多维数组的总数,而如果是交错数组,会返回交错数组里的数组个数
  • Clear方法:不删除数组元素,只是将数组里的元素没一个都设置为其默认值
  • Clone方法:返回一个数组的拷贝,该拷贝是一个堆数据的拷贝,修改新数组不会影响原始数组
  • Rank方法:获取整个数组的维数,也就是N*M里的N.

除了以上常用方法,还可以使用ToCharArray将字符串转为字符数组。再使用Reverse方法反转该字符串数组

C#冷知识

1,一个类型要么是值类型、要么是引用类型。值类型的数据总是拷贝值,而引用类型的数据总是拷贝引用。所以比较推荐的用法是,值类型内存占用最好不要超过16字节

2,引用类型的实例指向堆,运行时要先从变量读到内存位置,然后再跳转到堆里数据存储的实际位置

3,一般不能将null赋给值类型,但是在值本来缺失的时候,由不希望编译报错,可以使用可空修饰符:?

     private static void Main()
        {
            int? count = null;
            Console.WriteLine(count);
        }

一个好处是,在进行数据库编程的时候不用担心取到null值给值类型会报错了,因为数据库里没有数据的时候就是null,这时候用可空修饰符就没有关系。int的默认值0在表里可是也是有意义的,所以说一定要给值类型一个缺失而不是指定某个值。

4,可以使用var来隐式声明变量,编译器会依据编译时赋的值来确定类型。但是如果不是显而易见的的类型,尽量不要使用var,而是使用本来类型来声明变量

C#新知识

1,可以使用default关键字来获取任何数据类型的默认值:

int count =default(int)   //0

2,从C#3.0开始,创建数组时不需要显示指定数据类型,也可以依据元素来确认:

       private static void Main()
        {
            var people = new[] { "hhh", "ttt" };
        }
版权声明:本文为sinat_33087001原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_33087001/article/details/103287176

智能推荐

TensorFlow架构与设计:OP本质论

作者:刘光聪 ,中兴通讯高级系统架构师,专注机器学习算法,分布式系统架构与优化。 原文:TensorFlow架构与设计:OP本质论 责编:王艺 CSDN AI记者,投稿、寻求报道、深入交流请邮件[email protected]或扫描文末二维码添加微信。 相关文章: 图解TensorFlow架构与设计 TensorFlow架构与设计:图模块 TensorFlow架构与设计:会话生命周期 TensorF...

C#——数据类型

强类型语言 在变量确定数据类型后,没经过强制类型转换,两种不同的数据类型不能进行运算 弱类型语言 数据类型可以被忽略,在变量确定了数据类型后,两种不同的数据类型可以进行运算 动态语言 先写入数据,自动补充数据类型 现在内存中写入数据,再自动添加数据类型的标签 静态语言 先定义数据类型,再添加数据 先在内存中开辟数据类型对应的空间,再向该空间了写入数据 C#是强类型的静态语言 检测应用占用的内存: ...

C#数据类型

数据类型 1.1数据类型作用 规范了对于不同的数据所采用的的存储方式,存储空间等信息不同,计算机存储不同数据其读取速度也有区别 1.2数据类型分类 1.2.1值类型 什么是值类型:在计算机内存中声明一个值类型变量,则直接在其变量名所指向的位置内存栈空间中存储其值 在调用时,直接通过变量名找到内存栈的位置即可获取到存储的数据结果 值类型直接存储其值,可以直接改变其值 调用速度快,但是存储空间小 内存...

C# 数据类型

C# 数据类型 在 C# 中,变量分为以下几种类型: 值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types) 值类型 值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当您声明一个 int 类型时,系统分配内存来...

数据类型本质分析

1 “类型”是对数据的抽象 2 类型相同的数据有相同的表现形式、存储结构及相关的操作 3 程序中所有的数据必定属于某种类型 数据类型的本质 1 数据类型是固定内存大小的别名 2 数据类型的作用:编译器预算对象(变量)分配的内存空间大小 3 如何求数据类型的大小sizeof(int *) sizeof是操作符,不是函数;sizeof测量的实体大小为编译期间就已确定 数据类型的...

猜你喜欢

C语言day1(数据类型、变量本质)

1、数据类型的用途及本质 数据类型的本质:固定大小内存块的别名 2、怎样给数据类型取别名 3、void *的初探 4、变量的本质是什么?          一段连续内存空间的别名(一个门牌号) 通过变量往内存读写数据,不是往变量读写数据 5、静态存储区的理解 如果p1和p2指针指向的数据完全相同,则编译器会让p1和p2指向同一块内存空间。 内存四区...

C语言 - 什么是数据类型?数据类型的本质

C语言中提供了许多的数据类型,如下图所示: c语言为什么要引入这么多的数据类型呢?因为C语言归根结底只是一门编程语言,一种让计算机为我们做事情的工具。引入这么多的数据类型是为了更加方便的表现现实世界中事物。 1.什么是数据类型? C语言为我们提供了int, float等基本数据类型,这些都是表示基本数据用的。然而C语言也为我们提供了复杂的数据类型,比如struct, union等。这些可以由基本数...

冒泡排序,及改进方式,性能优化400%>>>附图解加源码

首先源码附上,源码中带有注释,看不懂没关系,源码后面附带图解,最后附上代码效率提升图 源码如下: 方案一:其实实现很简单,两层循环,每次内层迭代出最大的一个值,将其放入数组最后一个位置,外层循环的末端便往前移一位。其原理如下图 方案一代码块: 方案二:优化改进 仔细观察上面的图,我们不难发现当迭代到图下这样的情况时,其实已经全排序好了,但是我们还是需要对它进行1,2,3,4,5,6的迭代,这些情况...

css3常用选择器

先介绍一下基本选择器,如下几种 *:通配符。选择页面的所有元素 E:元素选择器。对页面的一些元素进行选择,如p,div,li等 .class:类选择器 #id:id选择器。一个Id在一个页面中只能选择,这是和类选择器的区别 E F:后代选择器。如ul li。选中ul下的li E>F:子元素选择器。如下,可以用 h1 > strong {color:red;}使h1的子元素strong变...

python is not set from command line or npm configuration

问题 猜测原因  python版本冲突 解决方案  去官网找到最新版本python 点击下载,注意记住你下载的目录,下载好以后,打开这个目录下的文件夹,Python310, 整个文件夹复制一下 在项目里运行npm config list --json 找到python的路径   我的是 C:\\Python27\\python.exe 说明项目里用的还是py...