|
一、枚举类型:
枚举类型是一种独特的值类型,它用于声明一组具有相同性质的常量。编写与日期相关的应用程序时,经常需要使用年、月、日、星期等日期数据,可以将这些数据组织成多个不同名称的枚举类型。使用枚举类型可以增加程序的可读性和可维护性。同时,枚举可以避免类型错误。
1、在C#中使用关键字enum类声明枚举;
enum 枚举名
{
List 1= value 1;
List 2=value 2;
List 3=value 3;
}
2、创建一个控制台应用程序通过枚举来判断当前日期是星期几:
class Program
{
enum MyDate //使用enum创建枚举
{
Sun = 0, //设置枚举值名称Sun,枚举值为0
Mon = 1, //设置枚举值名称Mon,枚举值为1
Tue = 2, //设置枚举值名称Tue,枚举值为2
Wed = 3, //设置枚举值名称Wed,枚举值为3
Thi = 4, //设置枚举值名称Thi,枚举值为4
Fri = 5, //设置枚举值名称Fri,枚举值为5
Sat = 6 //设置枚举值名称Sat,枚举值为6
}
static void Main(string[] args)
{
int k = (int)DateTime.Now.DayOfWeek; //获取代表星期几的返回值
switch (k)
{
//如果k等于枚举变量MyDate中的Sun的枚举值,则输出今天是星期日
case (int)MyDate.Sun: Console.WriteLine("今天是星期日"); break;
//如果k等于枚举变量MyDate中的Mon的枚举值,则输出今天是星期一
case (int)MyDate.Mon: Console.WriteLine("今天是星期一"); break;
//如果k等于枚举变量MyDate中的Tue的枚举值,则输出今天是星期二
case (int)MyDate.Tue: Console.WriteLine("今天是星期二"); break;
//如果k等于枚举变量MyDate中的Wed的枚举值,则输出今天是星期三
case (int)MyDate.Wed: Console.WriteLine("今天是星期三"); break;
//如果k等于枚举变量MyDate中的Thi的枚举值,则输出今天是星期四
case (int)MyDate.Thi: Console.WriteLine("今天是星期四"); break;
//如果k等于枚举变量MyDate中的Fri的枚举值,则输出今天是星期五
case (int)MyDate.Fri: Console.WriteLine("今天是星期五"); break;
//如果k等于枚举变量MyDate中的Sat的枚举值,则输出今天是星期六
case (int)MyDate.Sat: Console.WriteLine("今天是星期六"); break;
}
Console.ReadLine();
}
}
二、类型转换
类型转换时将一种类型转换为另一种类型。转换可以是隐式转换或者是显示转换
1、隐式转换:所谓隐式转换就是不需要声明就能进行的转换。进行隐式转换时,编译器不需要进行检查就能安全的进行转换。
源类型 |
目 标 类 型 |
sbyte |
short、int 、long、folat、double、decimal |
byte |
short、ushort、int、uint、long、float、double或decimal |
short |
int、long、ulong、float、double或decimal |
ushort |
int、uint、long、ulong、float、double或decimal |
int |
long、float、double或decimal |
uint |
int、uint、long、float、double或decimal |
char |
ushort、int、uint、long、ulong、float、double或decimal |
float |
double |
ulong |
float、double或decimal |
long |
float、double或decimal |
从int、uint、long或ulong到float,以及从long或ulong到double的转换可能导致精度的损失,但不会影响其数量级。其他的隐式转换不会丢失任何信息。
将int类型的值隐式转换成long类型
int i=927; //声明一个整形变量i并初始化为927 long j=i; //隐式转换成long型 2、显示转换:
显示转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要在不存在的隐式转换的类型之间转换,就需要使用显示转换。
源类型 |
目 标 类 型 |
byte、ushort、uint、ulong 或 char |
|
Sbyte 或 char |
|
sbyte、byte、ushort、uint、ulong 或 char |
|
sbyte、byte、short 或 char |
|
sbyte、byte、short、ushort、uint、ulong 或 char |
|
sbyte、byte、short、ushort、int 或 char |
|
sbyte、byte、short、ushort、int、uint、ulong 或 char |
|
sbyte、byte、short、ushort、int、uint、long 或 char |
|
sbyte、byte 或 short |
|
sbyte、byte、short、ushort、int、uint、long、ulong、char 或 decimal |
|
sbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 decimal |
|
sbyte、byte、short、ushort、int、uint、long、ulong、char、float 或 double |
显式转换包含所有隐式转换和显式转换,因此总是可以使用强制转换表达式从任何数值类型转换为任何其他的数值类型。
创建控制台应用程序,将double类型的x进行显示类型转换
static
void Main(string [] age)
{
double x=19810927.0112; //建立double类型变量x
int y=(int)x;
//显式转换成变量类型Y
Console.WriteLine(y); //输出整形变量y
Coneole.ReadLine();
}
也可以通过Convert关键字来进行显式类型转换;
创建控制台应用程序,通过Convert关键字进行显式类型转换。
double
x=19810927.0112; //建立double类型变量x
int
y=Convert.ToInt32(x); //通过Convert关键字转换
Console.WriteLine(y); //输出整形变量y
Console.ReadLine();
将值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,并不会影响装箱对象的值
2、拆箱:拆箱允许将引用类型显示转换为值类型。
声明变量i并赋值为112.然后将其复制到装箱对象obj中。最后进行拆箱操作,将装箱对象obj赋值给整形变量j。
static void Main(string[] args)
{
int i = 112; //声明一个int类型的变量i,并初始化为112
object obj = i; //执行装箱操作
Console.WriteLine("装箱操作:值为{0},装箱之后对象为{1}",i,obj);
int
j=(int )obj; //执行拆箱操作
Console.WriteLine("拆箱操作:装箱对象为{0},值为{1}", obj, j);
Console.ReadLine();
}
拆箱后得到的值类型数据的值与装箱对象相等。在拆箱操作中,要符合类型一制的原则,否则会出现异常