添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

C# 数据类型

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

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

string stringVar = "Hello World!!";
int intVar = 100;
float floatVar = 10.2f;
char charVar = 'A';
bool boolVar = true;

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

C#数据类型

C#中的预定义数据类型

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

类型 描述 范围 后缀
byte 8 位无符号整数类型 0 到 255
sbyte 8 位有符号整数类型 -128 到 127
short 16 位有符号整数类型 -32,768 到 32,767
ushort 16 位无符号整数类型 0 到 65,535
int 32 位有符号整数类型 -2,147,483,648

2,147,483,647


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

9,223,372,036,854,775,807
l
ulong 64 位无符号整数类型 0 到 18,446,744,073,709,551,615 ul
float 32 位单精度浮点型 -3.402823e38 到 3.402823e38 f
double 64 位双精度浮点型 -1.79769313486232e308 to 1.79769313486232e308 d
decimal 128 位精确的十进制值,28-29 有效位数 (+ 或-)1.0 x 10e-28  到 7.9 x 10e28 m
char 16 位 Unicode 字符 任何有效的字符,例如 a,*, \x0058 (hex), or\u0058 (Unicode)
bool 8 位逻辑 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'。
int i = 21474836470;

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

uint ui = 100u;
float fl = 10.2f;
long l = 45755452222222l;
ulong ul = 45755452222222ul;
double d = 11452222.555d;
decimal mon = 1000.15m;

别名与.NET类型

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

别名 .NET类型 类型
byte System.Byte struct
sbyte System.SByte struct
int System.Int32 struct
uint System.UInt32 struct
short System.Int16 struct
ushort System.UInt16 struct
long System.Int64 struct
ulong System.UInt64 struct
float System.Single struct
double System.Double struct
char System.Char struct
bool System.Boolean struct
object System.Object Class
string System.String Class
decimal System.Decimal struct
DateTime System.DateTime struct

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

int i = 345;
Int32 i = 345;// 同上

类型转换

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

int i = 345;
float f = i;
Console.WriteLine(f); //输出:345

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

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

隐式转换
sbyte short, int, long, float, double, decimal
byte short, ushort, int, uint, long, ulong, float, double, decimal
short int, long, float, double, or decimal
ushort int, uint, long, ulong, float, double, or decimal
int long, float, double, or decimal.
uint long, ulong, float, double, or decimal
long float, double, or decimal
ulong float, double, or decimal
char ushort, int, uint, long, ulong, float, double, or decimal
float Double

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

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

public static void Main()
    int i = 100;
    uint u = (uint) i;
    Console.Write(i);
}

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