C# 几种常用的数据类型
本文讲到 C# 的几种常用的数据类型,统共可以分为两类,值类型和引用类型。
下面陈列出常用的值类型:
类型 | 描述 | 范围 | 默认值 | 内置的类型转换方法 |
bool | 布尔值 | True 或 False | False | ToBoolean |
char | 16位Unicode字符(字符类型) | 单个字符 | ToChar | |
datetime |
0001/1/1 00:00:00到 9999/12/31 23:59:59 |
ToDateTime | ||
float | 32 位单精度浮点型 | 0.0F | ToSingle | |
double | 64 位双精度浮点型 | 0.0D | ToDouble | |
decimal | 128 位精确的十进制值,28-29 有效位数 | 0.0M | ToDecimal | |
byte | 8 位无符号整数类型 | 0 到 255 | 0 | ToByte |
ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 | ToUInt16 |
uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 | ToUInt32 |
ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 | ToUInt64 |
sbyte | 8 位有符号整数类型 | -128 到 127 | 0 | ToSByte |
short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 | ToInt16 |
int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 | ToInt32 |
long | 64 位有符号整数类型 |
-923,372,036,854,775,808 到 9,223,372,036,854,775,807 |
0L | ToInt64 |
1. float 和 double 的区别:
float 是单精度类型,精度是 6 位有效数字,占用4个字节的存储空间;
double 是双精度类型,精度是 15 位有效数字,占用8个字节的存储空间;
double 精度和范围都更大,运算时间也就更长。所以能用 float 就不用 double。
2. 如果我们在代码中写一个 12.3,编译器会自动认为这个数是个 double 型。所以如果我们想指定 12.3 为 float 类型,那么你必须在数字后面加上 F/f:
float f = 12.3F;
3.decimal 类型具有更高的精度和更小的范围,适合于财务和货币计算。但 decimal 类型不是 C# 的基础类型,所以使用的时候会对计算时的性能有影响。
引用类型有 Object 和 String:
对象类型(Object)是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。
所以对象类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。
当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。
object obj; obj = 100; // 这是装箱,详细:https://www.cnblogs.com/FoxLibrary/p/13861815.html
C# String 字符串的前面可以加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待,比如:
string str = @"C:\Windows"; 等价于: string str = "C:\\Windows";
@ 字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。
string str = @"<script type=""text/javascript""> <!-- --> </script>";
整数类型转换的区别:
Convert.ToInt32(null) 会返回 0 而不会产生任何异常;
但 int.Parse(null) 则会产生异常。int.Parse("4.5") ,直接报错:"输入字符串的格式不正确";
int.TryParse() 其实是对 int.Parse() 做了一个异常处理,如果出现异常则返回 false,并且将输出参数返回 0。
Convert.ToInt32(double value) 如果 value 为浮点型,采用四舍五入;
int(4.6) = 4,int 转化其他数值类型为 int 时没有四舍五入,强制转换(截取整数部分。
//这里用null和double类型数据来测试 int b; double m = 1.232d; bool rlt1 = int.TryParse(null, out b); //结果:b返回为0,rlt1为false bool rlt2 = int.TryParse(m, out b); //结果:b返回为0,rlt2为false
参考学习: