C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#中的枚举和结构体

C#中的枚举和结构体用法解读

作者:梦回大唐敲代码

这篇文章主要介绍了C#中的枚举和结构体用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

枚举

枚举的声明

用enum关键字修饰,加枚举名

enum 枚举名
    {
      值1,
      值2,
      值3,
      ````
    }

什么时候使用枚举

在确定值的数量和值的时候使用枚举,规范程序的开发

枚举的赋值

枚举名 变量名=枚举名.值;
Day nowDay = Day.星期一;

结构体

结构体的声明 用struct关键字修饰,加结构体名

结构体的使用

结构体中可以存储不同类型的数据,一般都是每个个体共同拥有一些属性时使用结构体

    struct Student
    {
      变量类型 变量名;
      变量类型 变量名;
    }

结构体中的方法

代码示例:

using System;
using System.Reflection;
namespace 第十章枚举和结构体
{
#region 枚举
   
    //枚举的声明  用enum关键字修饰,加枚举名
    //枚举类型中默认存储的是int类型的,并且后面的值总是前一个值加一;
    enum Day : int   //枚举名后面可以加上限制,但是限制的类型只能是整形 int ,long ,short 等;
    {
        星期一 =0,
        星期二 =1, //枚举中的值可以通过等号改变
        星期三,
        星期四,
        星期五,
        星期六,
        星期日
    }
    #endregion
#region 结构体
   
    //结构体的声明 用struct关键字修饰,加结构体名
    //结构体中可以存储不同类型的数据,一般都是
    struct Student
    {
        public string name;
        public  Xingb xingbie;  //结构体可以和枚举连用
        public  int  age;
        public  string banji;
        public bool youden;
    }
    enum Xingb
    {
        男,
        女
    }
  
    #endregion
    class Program
    {
     #region 结构体中的方法
        //定义一个结构体
        struct Teacher
        {
            public static string name;
            public int age;
            //非静态方法可以使用静态的属性
            public void Jieshao()
            {
                Console.WriteLine("你好,我是:"+name+"我今年"+age);
            }
            //静态方法方法中不能使用非静态的属性
            public static void Kecheng()
            {
                Console.WriteLine("我教你们语文课程"+name);
            }
        }
        #endregion
        static void Main(string[] args)
        {
#region 枚举
          
            //小飞经常出去旅游,但是每次出去对日期总是很纠结,
            //用使用枚举帮小飞随机选择出去旅游的日子
            Random _ran = new Random();
            //因为枚举时从0开始,后面是前面数字加1,所以取值为 0到7,但不包括7.
            int _numDay = _ran.Next(0,7);
           
     #region 枚举与int类型的相互转换
            Day nowDay = Day.星期一;
            //枚举类型可以转换成int类型
            int num = (int)nowDay;
            //因为枚举类型默认是整数类型,并且第一个值从0开始,所以星期一转换成int 类型值就是0
            Console.WriteLine(num);
            //int转换为枚举类型(在这我们用随机数来确定小飞的出游时间)
            Day _nowDay1 = (Day)_numDay; //int转换枚举时要注意枚举中的值是否存在
            //打印小飞出游的时间
            Console.WriteLine(_nowDay1 );
            #endregion
     #region 枚举类型与string类型之间的转换
            //将枚举转换成字符串
            Day strDay = Day.星期三;
            //枚举可以使用.ToString();方法
            string _strDay1 = strDay.ToString();
            Console.WriteLine(_strDay1);
            //将string类型转换为枚举
            //在这我们用上面的随机数,先将随机数转换为string,方便学习string转换为枚举
            string _strDay2 = _numDay.ToString();
            //string中有个Parse方法可以将string转换为枚举
                            //  该方法需要两个参数,一个是类型,一个是string类型的变量
                             //我们需要获取这个枚举类型 这里使用 typeof(类型)方法获取枚举类型
                             //后面的代码只是将类型转换为枚举,但是我们需要转换为Day类型使用
                             //所以加了一个强转
            Day str3NowDay = (Day)Enum.Parse(typeof(Day),_strDay2);
            //上面代码中的字符串可以是枚举中的字符串值 如"星期一",如果字符串是数字值,枚举中没有
            //该数字值那么不会报错,但是如果是 "星期一"这种类型的值,枚举中没有的话会报异常
            //打印出的结果跟上述一样
            Console.WriteLine(str3NowDay);
            #endregion
            #endregion
#region 结构体
            //使用结构体首先要声明一个结构体类型
            Student stu1;
            //为结构体赋值,在结构体外赋值结构体中的变量必须是 Public(公开的)修饰的
            stu1.name = "张三";
            stu1.age = 16;
            stu1.xingbie = Xingb.男;
            stu1.banji = "六年级一班";
            stu1.youden = false;
            Student stu2;
            stu2.name = "李红";
            stu2.age = 15;
            stu2.xingbie = Xingb.女;
            stu2.banji = "六年级一班";
            stu2.youden = true;
            //打印李红的信息
            Console.WriteLine("姓名:"+ stu2.name+"\n年龄:" +
                      ""+ stu2.age+"\n性别:"+ stu2.xingbie+"\n优等生:"
                      + stu2.youden+"\n班级:"+ stu2.banji);
     #region 结构体中方法的使用
            Teacher ter1;
            //静态属性和静态方法一样都需要用结构体名调用
            Teacher.name = "杨雪";
            //非静态属性和方法直接使用变量名调用
            ter1.age = 21;
            ter1.Jieshao();
            Teacher.Kecheng();
            #endregion
            #endregion
        }
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文