[C#]学习笔记 包含枚举 属性 多维数组 嵌套循环 递归 字典

#网罗了网上的一些资料,再结合了一些自己的理解生成了此文

枚举(enum) 一种值类型

用清晰的名字定义独特的值

使用情景:当想要直接用事情名字代替数字的时候

作用:使得代码更加清晰可读,不需要记忆返回值对应的意义,而是直接使用事情名字去替代原先的值进行表达。

在后端存的是int,显现的是名字。枚举干的事情就是将值和事情直接关联,最终结果就是显现的值就是事情名字。

如此就不需要看着数字去回忆数字对应的事情含义,而是直接看到事情含义(事情的命名)。

(所以命名出能体现事情内容的清晰的名字也是很重要的)

注意:如果想要添加string到枚举类型里面需要进入Enum类里使用Parse方法

Enum 类的 Parse () 方法。 此方法用于将一个或多个    枚举常量的名称 或 数值的字符串表示形式     转换为   等效的枚举对象。说人话就是把名字或者字符串表示形式转变成枚举对象。

Enum.Parse<TutorialStage>(tutorialStageString);

      解析方法   枚举类型名      被解析的字符串变量名

foreach循环搭配使用遍历enum类型的对象

PS:如有错误欢迎指出

foreach (枚举类名 变量名 in Enum.GetValues(typeof(枚举类名)))
{
    // 循环
}

方法 GetValues 返回一个数组,其中包含枚举的每个成员的值 。如果多个成员具有相同的值,则返回的数组将包含重复值。typeof(x)中的x,必须是具体的类名、类型名称等,不可以是变量名称,也不可以是实例。C# 中的 typeof 运算符,用于获取类型的 System.Type 对象:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。

属性 property

类似于变量和函数的结合,定义的时候像定义变量一样定义,不过最后不是分号而是加上{}比如:private string PlayerName{get;set;}

可以像是使用变量一样赋值。

但是实际上属性并没有存储任何数据,C#编辑器使用了一个隐藏变量为此做数据。如果要手动实现看看做了什么,下面是部分代码:

private static string PlyerName;

private static string PlayerName{
    get{
        return playerName;
   }
    set{
        playerName = value;
   }
}

注:写static是因为主函数是static的,要标注static才可以在主函数里面使用。

其中的value

value是隐含参数,代表赋值时右边的新值。在主函数给PlayerName赋值的时候value会被替换成新值。

其中 get 和 set 都是函数

通常set会设定为private,意思就是只有在该类的代码区域之中才可以进行set(设置)值,其他类的代码区域是无法进行访问和修改的。

通常get为public,意思是其他类的代码区域也可以进行访问获取这个值。

也可以将get和set功能的函数单独拿出来实现

private static string PlayerName{get;set;}

private static string plyerName;

private static void SetPlayerName(string playerName){
   Program.playerName = playerName;
}

private static void GetPlayerName(){
   return Program.playerName;
}

通常使用属性来实现单例模式

多维数组

定义多维数组

int[,] intArray = new int[5,6];
//一个逗号表示二维数组
intArray[0,2] = 2;//设置值

使用intArray.Length获得intArray数组长度,这个获得的是多维数组总长度,在本代码中就是5X6=30,值是30。如果想获得多维数组的单维度的长度使用GetLength,在本代码里是intArray.GetLength(0)这将获得第一行的长度

如果想要遍历多维数组中的元素只需要嵌套使用两次for循环

for(int i = 0;i < intArray.length;i++){
    for(int j = 0;j < intArray.length;j++){
        Console.WriteLine(i + "," + j + ":" +intArray[i,j]);
    }
}

如果是int[,] intArray = new int[,];那么元素必须得对称,如果前面是3个后面也得是3个。

还可以在数组里面定义数组

int[][] intArray = new int[5][];

for(int i=0;i<intArray.Length;i++){

intArray[i]=new int[6];

}

如果尝试打印出来会发现是空的,因为数组里的元素都是一个对象,是一个数组,是引用类型而不是值类型,不会自动初始化为0.

数组的数组给索引的时候可以设置给数组元素的大小,即作为元素的数组的大小(设置该作为数组元素的数组可以装多少个值),比如

int[][] intArray = new int[5][];

intArray[0]=new int[6];
intArray[1]=new int[3];
intArray[2]=new int[4];

嵌套循环

内循环的break只适用于内循环,想要两个都break就需要在外循环设置if语句,当内循环break的时候外循环也break。

break 和 continue语句适用于任何循环

嵌套循环不应该太多次,太多次会影响代码的可读性。

递归

函数不断调用自身

字典

使用情形:一对数据 可以直接描述存储什么值,替代数组对应记忆

Dictionary<键,值类型>

键和值两者可以是任何类型

resourceTypeDictionary.Add(ResourceType.Stone,56);

灵活运用

字典.Add(字典的键.字典键里的某个元素,赋予值);

字典.Add(字典的键,赋予值);

如果想要读取字典里的元素值

字典名[键]可以通过键访问字典中的值。使用索引符号[]和键来获取对应的值。

想要赋值可以像数组赋值那样

注意:每一个键是唯一的,只能添加(Add)一次值,如果要修改请使用类似数组的语法

检查数组中是否存在某个值使用ContainKey的方法或者TryGetValue方法

删除使用Remove方法   字典.Remove(键);

直接对字典本身直接初始化对象(注意成对初始化)

Dictionary<ResourceType,int>resourceTypeAmountDictionary=new Dictionary<ResourceType,int>(){
    {ResourceType.Stone,10},
    {ResourceType.Wood,10},
};

foreach遍历枚举

KeyValuePair<TKey,TValue> 结构
foreach( KeyValuePair<ResourceType, int> KeyValuePair in resourceTypeAmountDictionary )
{
    Console.WriteLine(KeyValuePair.Key+":" +keyValuePair.Value);
}

另一种写法 使用Keys 循环滚动浏览每一个

foreach( ResourceType resourceType in resourceTypeAmountDictionary.Keys )
{
    Console.WriteLine(resourceType+":" +resourceTypeAmountDictionary[resourceType]);
}

特别的,在Unity里面

如果想要在编辑器里面直接设置想要的值

可以先自定义类,标记Serializable

然后在下面列出清单

第一个foreach循环是给设置值,第二个for循环时打印出这些值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值