C# 6.0本质论(数据类型)

本文深入探讨了C#中的各种数据类型,包括整数、浮点数、十进制数、字符串、数组等,详细解释了每种类型的特性和使用场景,以及数据类型之间的转换规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二、数据类型

  • 预定义类型
    • 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
      • 根据实际数据类型进行判断
      • 在声明的同时必须用确定类型的表达式进行初始化
      • 作用:支持匿名类型
  • 匿名类型
    • 类型未知
      • 如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。
  • 不存在从数值类型到布尔类型的有效转型
    • 防止发生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[]表示数据类型,后面的[]表示数组
      • 数组大小可以不一致
    • 必须为内部的每个数组都创建数组实例,即必须使用new操作符
      • int[][] cells = { new int[]{1,2,3}, new int[]{1,2}, new int[]{1} }

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()

2.6.5 字符串作为数组使用

  • 访问string类型的变量类似于访问字符数组
    • char s = Str[0]
  • 将字符串转化为字符数组
    • ToCharArray()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值