C#复杂数据类型

——枚举

语法:
[public] enum 枚举名
{
    值1,
    值2,
    值3,
    ........
}

public:访问修饰符。公开的公共的,哪都可以访问。
enum:关键字,声明枚举的关键字
枚举名:要符合Pascal命名规范

一般将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。

枚举就是一个变量类型 ,只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。

我们可以将一个枚举类型的变量跟int类型和string类型互相转换。
枚举类型默认是跟int类型相互兼容的,所以可以通过强制类型转换的语法互相转换。
当转换一个枚举中没有的值的时候,不会抛异常,而是直接将数字显示出来。

枚举同样也可以跟string类型互相转换,如果将枚举类型转换成string类型,则直接调用ToString().
如果将字符串转换成枚举类型则需要下面这样一行代码:
(要转换的枚举类型)Enum.Parse(typeof(要转换的枚举类型),”要转换的字符串”);
如果转换的字符串是数字,则就算枚举中没有,也会不会抛异常。
如果转换的字符串是文本,如果枚举中没有,则会抛出异常。

//演示一下枚举类型和int类型之间的转换
//枚举类型的每个值都有一个对应的递增的索引,可以通过赋int值来改变索引,枚举值转换成int类型得出的也是索引
public enum QQState
    {
        OnLine=1,
        OffLine,
        Leave,
        Busy,
        QMe
    }
 //取出一个枚举类型的值,转换成int
 QQState state = QQState.OnLine//枚举取值只能去枚举中的值
 int n= (int) state;//结果为1
 Console.WriteLine((int)QQState.OffLine);//2
Console.WriteLine((int)QQState.Leave);//3
Console.WriteLine((int)QQState.Busy);//4
Console.WriteLine((int)QQState.QMe);//5
 //将int类型转换成枚举类型,还是使用上面定义的那个枚举
int n1 = 3;
QQState state = (QQState)n1;
Console.WriteLine(state); //输出该枚举类型的 Leave
//将枚举类型转换成string类型
QQState state = QQState.OnLine;
string s = state.ToString();
Console.WriteLine(s);//输出OnLine,但是这个OnLine的数据类型为string
//将string转换成枚举类型
//有个前提,string字符串需要时枚举类型中有的才可以转换,否则会抛异常
string s = "ABCDEFG";
QQState state = (QQState)Enum.Parse(typeof(QQState), s);
Console.WriteLine(state);
//上面这个之心那个就会抛异常,因为QQState枚举中没有ABCDEFG

来一个字符串成功转换成枚举的例子

string s="1";
QQState enums = (QQState)Enum.Parse(typeof(QQState),s);
Console.WriteLine(enums);//输出OnLine

最后注意一点,枚举类型的值只能通过 枚举名.值 来取

——结构
可以帮助我们一次性声明多个不同类型的变量。

语法:
[public] struct 结构名
{
    成员;//字段
}

结构一般定义在命名空间层下,调用时需要实例化
变量在程序运行期间只能存储一个值,而字段可以存储多个值。

//定义一个结构
public struct Person
    {
        public string _name;
        public int _age;
        public Gender _gender;//值类型为枚举
    }
public enum Gender
    { 
        男,
        女
    }
//对以上结构实例并初始化
Person zsPerson;
zsPerson._name = "张三";
zsPerson._age = 21;
zsPerson._gender = Gender.男;

Person lsPerson;
lsPerson._name = "李四";
lsPerson._age = 22;
lsPerson._gender = Gender.女;

其实会发现结构和类很相似,本来他们也很相似,后面再说他们的相似之处有多大

——数组
一次性存储多个相同类型的变量。
语法:
数组类型[] 数组名=new 数组类型[数组长度];

注意:数组的长度一旦固定了,就不能再被改变了

//数组的四种声明方式
int[] nums = new int[10];//声明一个长度为10 的数组
int[] nums = {1,2,3,4,5,6,7};//声明并赋值,长度自动计算
int[] nums = new int[]{1,2,3,4,5}//声明并赋值,这中形式常用于参数
int[] nums = new int[5]{1,2,3,4,5}//声明长度并赋值,长度必须和赋值数相等,一般别用这样的方式
//数组常用方法
Array.Reverse(nums);//对数组进行反转
Array.Sort(nums);//对数组元素进行升序排列,前提元素是数字

数组经典案例,冒泡排序,下面看看冒泡排序的理,每一次拿第一个数和后面的比较
int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9
第一趟比较:8 7 6 5 4 3 2 1 0 9 交换了9次 i=0 j=nums.Length-1-i
第二趟比较:7 6 5 4 3 2 1 0 8 9 交换了8次 i=1 j=nums.Length-1-i
第三趟比较:6 5 4 3 2 1 0 7 8 9 交换了7次 i=2 j=nums.Length-1-i
第四趟比较:5 4 3 2 1 0 6 7 8 9 交换了6次 i=3 j=nums.Length-1-i
第五趟比较:4 3 2 1 0 5 6 7 8 9 交换了5次
第六趟比较:3 2 1 0 4 5 6 7 8 9 交换了4次
第七趟比较:2 1 0 3 4 5 6 7 8 9 交换了3次
第八趟比较:1 0 2 3 4 5 6 7 8 9 交换了2次
第九趟比较:0 1 2 3 4 5 6 7 8 9 交换了1次

int[] nums = { 1, 4, 3, 9, 6, 8, 11 };
 for (int i = 0; i < nums.Length; i++)
            {
                for (int j = 0; j < nums.Length-1-i; j++)
                {
                    if (nums[j] > nums[j + 1]) {
                        nums[j] += nums[j + 1];
                        nums[j + 1] = nums[j] - nums[j + 1];
                        nums[j] -= nums[j + 1];
                    }
                }
            }
//这里看一下内层循环算法,其实就是交换两个数的位置
/*
  比如:a=10;b=9;
  a+=b;  则a==19;
  b=a-b; b=19-9==10;
  a-=b;  a=19-10==9;
  这样就交换了两个数的位置,实在不行就定义第三方变量
*/

——函数
函数就是将一堆代码进行重用的一种机制。

函数的语法:
[public] [static] 返回值类型 方法名([参数列表])
{
    方法体;
}

public:访问修饰符,公开的,公共的,哪都可以访问。
static:静态的

返回值类型:如果不需要写返回值,写void
方法名:Pascal 每个单词的首字母都大些。其余字母小写
参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不能省略。

方法写好后,如果想要被执行,必须要在Main()函数中调用。

方法的调用语法:
类名/对象名.方法名([参数]);
在某些情况下,类名是可以省略的,如果你写的方法跟Main()函数同在一个类中,这个时候,类名可以省略。

return
//1、在方法中返回要返回的值。
//2、立即结束本次方法
//定义一个方法,找出传入int数据的最大值,参数可以任意多个
//由于参数可以任意多个,所以需要使用params
public static int GetMax(params int[] nums) {
            int max = nums[0];
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] > max)
                    max = nums[i];
            }
            return max;
        }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值