C# 数据类型

C#是一种强类型的语言。这意味着我们必须声明一个变量类型,该变量指示将要存储的值的类型,例如整数,浮点数,十进制,文本等。

以下声明和初始化了不同数据类型的变量。

stringstringVar="HelloWorld!!";intintVar=100;floatfloatVar=10.2f;charcharVar='A';boolboolVar=true;

C#主要将数据类型分为两种:值类型和引用类型。值类型包括简单类型(例如int,float,bool和char),枚举类型,结构类型和Nullable值类型。引用类型包括类类型,接口类型,委托类型和数组类型。在下一章中将详细了解值类型和引用类型。

C#数据类型

C#中的预定义数据类型

C#包括一些预定义的值类型和引用类型。下表列出了预定义的数据类型:

类型描述范围后缀
byte8 位无符号整数类型0 到 255
sbyte8 位有符号整数类型-128 到 127
short16 位有符号整数类型-32,768 到 32,767
ushort16 位无符号整数类型0 到 65,535
int32 位有符号整数类型-2,147,483,648

2,147,483,647

uint32 位无符号整数类型0 到 4,294,967,295u
long64 位有符号整数类型-9,223,372,036,854,775,808

9,223,372,036,854,775,807
l
ulong64 位无符号整数类型0 到 18,446,744,073,709,551,615ul
float32 位单精度浮点型-3.402823e38 到 3.402823e38f
double64 位双精度浮点型-1.79769313486232e308 to 1.79769313486232e308d
decimal128 位精确的十进制值,28-29 有效位数(+ 或-)1.0 x 10e-28 到 7.9 x 10e28
char16 位 Unicode 字符任何有效的字符,例如 a,*, \x0058 (hex), or\u0058 (Unicode)
bool8 位逻辑 true/false 值True 或 False
object所有类型的基类
string

Unicode字符序列

DateTime表示日期和时间0:00:00am 1/1/01

11:59:59pm 12/31/9999

如上表所示,每种数据类型(字符串和对象除外)都包含值范围。如果该值超出数据类型的允许范围,则编译器将给出错误。例如,int数据类型的范围是-2,147,483,648到2,147,483,647。因此,如果分配的值不在此范围内,则编译器将给出错误。

示例:编译时错误

//编译时错误:无法将类型'long'隐式转换为'int'。inti=21474836470;

无符号整数,long,float,double和decimal类型的值必须分别以u,l,f,d和m为后缀。

uintui=100u;floatfl=10.2f;longl=45755452222222l;ulongul=45755452222222ul;doubled=11452222.555d;decimalmon=1000.15m;

别名与.NET类型

预定义的数据类型为其.NET类型(CLR类)名称的别名。下表列出了预定义数据类型的别名和相关的.NET类名称。

别名.NET类型类型
byteSystem.Bytestruct
sbyteSystem.SBytestruct
intSystem.Int32struct
uintSystem.UInt32struct
shortSystem.Int16struct
ushortSystem.UInt16struct
longSystem.Int64struct
ulongSystem.UInt64struct
floatSystem.Singlestruct
doubleSystem.Doublestruct
charSystem.Charstruct
boolSystem.Booleanstruct
objectSystem.ObjectClass
stringSystem.StringClass
decimalSystem.Decimalstruct
DateTimeSystem.DateTimestruct

这意味着无论您定义的是int还是Int32,变量都相同。

inti=345;Int32i=345;//同上

类型转换

某些数据类型的值会在C#中自动转换为不同的数据类型。这称为隐式转换。

inti=345;floatf=i;Console.WriteLine(f);//输出:345

在上面的实例中,整型变量 i 的值被赋给float类型 f 的变量,因为这个转换操作是在C#中预定义的。

以下是隐式数据类型转换表。

隐式转换
sbyteshort,int,long,float,double, decimal
byteshort,ushort,int,uint,long,ulong,float,double,decimal
shortint,long,float,double, ordecimal
ushortint,uint,long,ulong,float,double, ordecimal
intlong,float,double, ordecimal.
uintlong,ulong,float,double, ordecimal
longfloat,double, ordecimal
ulongfloat,double, ordecimal
charushort,int,uint,long,ulong,float,double, ordecimal
floatDouble

从int、uint、long或ulong转换为float以及从long或ulong转换为double可能会导致精度损失。没有数据类型隐式转换为char类型。

但是,并非所有数据类型都隐式转换为其他数据类型。例如,int类型不能隐式转换为uint。必须明确指定它,如下所示。

publicstaticvoidMain(){inti=100;uintu=(uint)i;Console.Write(i);}

在上面的示例中,整数i通过在括号(uint)中指定uint显式地转换为uint。这将把整数转换成uint。

编辑于2024-05-20 13:19