#网罗了网上的一些资料,再结合了一些自己的理解生成了此文
枚举(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循环时打印出这些值

696

被折叠的 条评论
为什么被折叠?



