C#
二、数据类型
- 预定义类型
- 8种整数类型、2种二进制浮点类型、十进制浮点类型、bool类型和char类型
2.1 基本数据类型
2.1.1 整数类型
- 所有基本类型都有短名称和完整名称
- 完整名称对应于BCL中的类型命名,在所有语言中是相同且唯一的
- 短名称或缩写的关键字最终也是和完整名称生成相同的代码
2.1.2 浮点类型
- float、double
- 二进制浮点数,换算成分数的分母是二的倍数
- 精度由有效数字的个数决定
- float的有效数字为7
- double的有效数字为15~16
- 进行计算允许结果为特殊值;例如,除以0得到NaN,Not a Number
2.1.3 十进制浮点类型
- decimal
- 128位精度的十进制浮点数,范围相对小,在不溢出的情况下,精度完全正确
- 后缀为M或者m
2.1.4 字面量
- 小数自动转化为double类型,整数按大小转化为int或long
- 标准格式说明符
- 格式说明符 + 精度说明符
字符 | 说明 | 示例 |
---|---|---|
C、c | 使用货币符号进行格式化 精度说明符:小数位数 | Console.WriteLine("{0:C1}",12.5);//¥12.5 |
D、d | 精度说明符:输出字符串中的最少位数,如果实际数字位数更少,在左边以0填充 | Console.WriteLine("{0:D4}",12);//0012 |
F、f | 精度说明符:小数的位数 | Console.WriteLine("{0:F4}",12.345678);//12.3457 |
X、x | 转化为十六进制字符串形式;精度说明符:输出字符串中的最少位数 | Console.WriteLine("{0:x}",42)//0x2A |
… | … | … |
R、r | 字面量转为string时,会按double精度进行显示,精度超出部分会被舍去,使用R格式说明符能保证原样转化;精度说明符:忽略 | Console.WriteLine("{0:R}",1.618033988749895); |
- 负数补码回值
按0取值,结果减1;
2.2 字符串
- string、String
- string是关键字、String是类,转化为CIL都是System.String
2.2.1 逐字字符串字面量
- @" … "
- 转义序列不被处理,除了代表双引号的转义外。
2.2.2 字符串插值
- $" {…} "
- 可以和逐字字符串字面量组合使用,例如$@" … {…}"
- 是string.Format(string format, string str)的简写
- 连续两个大括号表明大括号不是引入格式模板
- $"{{ { price:C2} }}" ----> { $1,234.56 }
2.2.3 字符串方法
- string.Format( format ,args);
- 格式字符串定义输出格式
- 索引占位符
- 必须对应一个参数
- 索引占位符
- 要插入的参数,即格式项
- 格式字符串定义输出格式
- string.Concat( str0, str1)
- string.Compare( strA, strB, ignoreCase )
2.2.4 字符串格式
- string.Format( “{0,20:C2}” , price )
- 20个字符长
2.2.5 换行符
- System.Environment.NewLine
- 消除平台差异,window换行\r\n,Linux为\n
2.2.6 字符串不可变
2.3 匿名类型
- 隐式局部变量
- var
- 根据实际数据类型进行判断
- 在声明的同时必须用确定类型的表达式进行初始化
- 作用:支持匿名类型
- var
- 匿名类型
- 类型未知
- 如new{ Title=“efe”,YearofPublication=“1877”},其中,Ttile和YearofPublication的类型都未显示指出。
- var people=new { property1=value1,property2=value2 }或者var people=new { person.property1,person.property2 }
- 编译器自动生成具有相同字段和属性的类型,并将显示指出的名称或赋值所用的属性作为相应的属性名称
- 类型未知
2.4 可空修饰符
- 值类型
- 添加可空修饰符后可以存储null,例如 int? a
- 作用:数据库表中值类型允许为null
2.5 数据类型之间的转换
2.5.1 显式类型
- 从大容量类型转换为小容量类型
- 使用转型操作符
- (int) longNumber
- 程序员负责确保数据转换成功
- 运行时可能引发异常
- 使用转型操作符
- 类型溢出
- 占用符号位导致数据为负值
- checked、unchecked
- checked {…} 或者编译时使用checked选项
- 表示值溢出时抛出OverflowException
- unchecked{ … }
- 表示不抛出异常,默认为unchecked。
- checked {…} 或者编译时使用checked选项
- 不存在从数值类型到布尔类型的有效转型
- 防止发生if(x=5)编译通过的情况
2.5.2 隐式转型
- 从小容量类型转换为大容量类型
- 不要求使用转型操作符
2.5.3 不使用转型操作符的类型转换
- 字符串转数值类型
- 相应类型的Parse() 方法
- bool TryParse(… ,out …)
- 当转换失败时不会抛出异常,而是返回false
- System.Convert
- 支持基本类型之间的互相转化
2.6 数组
2.6.1 数组大小
- 不提供字面量就必须指定数组大小
- 可以是变量,在运行时能计算得到确定值
2.6.2 多维数组与交错数组
- 多维数组
- int[ , ]
- 数组大小必须一致
- int[ , ]
- 交错数组
- int[][]
- 数组的数组
- int[]表示数据类型,后面的[]表示数组
- 数组大小可以不一致
- 必须为内部的每个数组都创建数组实例,即必须使用new操作符
- int[][] cells = { new int[]{1,2,3}, new int[]{1,2}, new int[]{1} }
- int[][]
2.6.3 Length
- 多维数组的长度为所有元素的总个数
- 交错数组的长度为最外层数组的长度
2.6.4 数组方法
- 静态方法
- System.Array.Sort( array )
- System.Array.Reverse( array )
- System.Array.Clear( array )
- System.Array.BinarySearch( array, searchString )
- 针对有序数组进行查找
- System.Array.Resize()
- 重建数组,并将所哦有元素复制到新数组中
- 实例方法
- GetLength()
- 获取指定维度上的长度
- Clone()
- GetLength()
2.6.5 字符串作为数组使用
- 访问string类型的变量类似于访问字符数组
- char s = Str[0]
- 将字符串转化为字符数组
- ToCharArray()