不要为了写笔记而学习!!!

其实学完一章再返回复习,然后做笔记,真的很费时间(电子书还不方便)。当然,复习带来的价值,是值得花时间的。

  • 枚举、结构

枚举的类型有限(short、byte...)且是相同的,在MSDN上找到枚举的一些示例,觉得这个还不错:

        enum myWeekDay { Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
int i = 3;
myWeekDay today = (myWeekDay)i;

枚举是需要先声明的,然后再通过新建一个变量(today)为枚举类型来使用。枚举默认的基本类型值从0开始,递增1,这叫等差数列

枚举声明时,建议放在命名空间,当然,也可以放在类或结构中。将其它变量赋值给枚举类型时,需要强制转换,例如:today = (myWeekDay)myByte。当然,还有Enum.Parse(typeof(),)命令,就不具体研究了,用时再来看。

结构(struct就比较好用了,一个结构内支持不同基础数据类型。同样需要先声明结构,然后再声明变量为该结构类型,从而使用:

    enum orientation : byte { north = 1, south = 2, east = 3, west = 4};
struct route
{
public orientation direction;
public double distance;
}

使用public:让调用该结构的代码可以访问该结构的成员。具体应用:

            route myRoute;
int myDirection = -1;
double myDistance;
Console.WriteLine("1) North\n2) South\n3) East\n4) West");
do
{
Console.WriteLine("请选择一个行驶方向:");
myDirection = Convert.ToInt32(Console.ReadLine());
} while (myDirection < 1 || myDirection > 4);
Console.WriteLine("请输入一个距离:");
myDistance = Convert.ToDouble(Console.ReadLine());
myRoute.direction = (orientation)myDirection;
myRoute.distance = myDistance;
Console.WriteLine("指定方向 {0} 的距离是 {1}", myRoute.direction, myRoute.distance);

注意myRoute.direction = (orientation)myDirection这一行代码,应该是枚举的应用场景:只需要指明枚举值中的基本类型值i,再通过(enumName)i的方式,即可取得对应的字符串。

声明一个结构:route(创建的结构名) myRoute,再通过 myRoute.属性 的方式访问结构中的成员。

  • 数组

印象中的数组总是比较复杂的东东。一个不错的例子:需要存储10个同学的姓名,使用数组即可简单解决,首先声明数组:

string[] friendNames = new string [arrayCount];
string[] friendNames = {"张三","李四","王五","谢六","陈七"};

第一行只初始化数组大小,可选 常数常量,初始化后,才可使用friendNames[0]的方式为数组元素赋值。第二行直接声明数组,并且初始化了数组的内容。

可使用for循环,配合friendNames.Length的大小,来访问数组值,注意第1个元素的位置是0。也可使用foreach,并且不担心超出数组范围。foreach与for的区别在于,foreach是只读访问。

foreach (string myStr in friendNames)
{
Console.WriteLine(myStr);
}

多维数组分为矩形数组(多行的每行元素个数相同)、锯齿数组(多行的每行元素个数不同,并可能存在 {列1{行1{层1,层2},行2},列2...}),当然,同样可以使用foreach的方式,取出所有元素的内容,多嵌套一个foreach即可:

            int[][] jaggedIntArray = { new int[] { 1, 2, 3 }, new int[] { 4, 5 }, new int[] { 6, 7, 8, 9 }, new int[] {10, 11} };
foreach(int[] topArray in jaggedIntArray)
{
foreach (int bottomArray in topArray)
{
Console.Write("{0} ", bottomArray);
}
Console.Write("\n");
}

注意:这儿用的都是[]或{},没有用()的方式哈,不要总写错括号,很低级。

  • 字符串处理

这个就有意思多了。可以通过myString[1]的方式访问字符串中的每个字符,第1个字符位是0:

String myString = "  HeLlO WoRlD ";
char myChar = myString[1];

使用ToCharArray(),获取一个分解myString每个字符后的char数组:

char[] myChars = myString.ToCharArray();

还可以使用myString.Length获取字符串的数量,使用myString.ToLower()转为大写,myString.ToUpper()转为小写。注意:ToLower()、ToUpper()并不会改变变量本身的值的大小写,还需要用myString = myString.ToLower()才能修改变量本身的值。

myString.Trim()可以去掉字符串前、后的空格,还有TrimStart()和TrimEnd(),分别去掉前面和后面的空格。还可以使用Trim(myChar[])的方式,指定去除前后的内容不限于空格(char[] myChar = {' ','s'}):

            myString = "  sfrost/110110200010101100-13090909880 ";
char mykg = ' ';
char[] myxhx = {'-','/'};
String[] myStrings = myString.Trim(mykg).Split(myxhx);
Console.WriteLine("myStrings[0] = {0}", myStrings[0]);
Console.WriteLine("myStrings[1] = {0}", myStrings[1]);
Console.WriteLine("myStrings[2] = {0}", myStrings[2]);

最近刚好在搞微信开发,在C#中,上面这个例子,就可以实现以一个(些)关键字分解用户输入的个人信息。例子中使用的Split()方法,同样的可以使用char数组来指明分解的标识。强调一下,Split分解字符串的位置可以是多个不同标记的位置。

  • 结语

从这章开始,很多内容都可以马上做一些小的课题了,呵呵。不管是枚举(同类型)、结构(成员不同类型)、数组(一维、矩形[二维]、锯齿[不规则多维])、以及字符串处理,还有枚举与普通变量之间的值如何转换,数组如何声明、初始化和访问等等。而字符串的处理就太有意思了,特别是split,还有replace,再应用char数组,可以说是锦上添花啊。

  • 附:习题案例

编写一个控制台应用程序,接收用户输入的字符串,将字符串的顺序以输入时相反的方向输出:

            Console.WriteLine("请输入需要交换位置的字符串:");
String myString = Console.ReadLine().Trim();
Console.WriteLine("{0}", myString.Length);
String tmpStr = "";
for (int i = myString.Length; i > 0; i--)
{
tmpStr += myString[i-1];
}
Console.WriteLine(tmpStr);

编写一个控制台应用程序,接收用户输入的字符串,用yes替换字符串中的所有no:

            Console.WriteLine("请输入带有no的字符串:");
myString = Console.ReadLine().ToLower().Trim();
Console.WriteLine("用 yes 替换掉 {0} 中的 no 后:{1}", myString, myString.Replace("no", "yes"));

编写一个控制台应用程序,给字符串的每个单词加上引号(我以为,单词间肯定有空格):

            Console.WriteLine("请输入带有空格的单词:");
String myWord = Console.ReadLine().Trim();
String[] myWords = myWord.Split(' ');
myWord = "";
foreach(String tmpWord in myWords)
{
myWord += "\"" + tmpWord + "\" ";
}
Console.WriteLine("添加引号后的句子:{0}", myWord);

02-C#入门(枚举、结构等)的更多相关文章

  1. 03 Mybatis:01.Mybatis课程介绍及环境搭建&&02.Mybatis入门案例

    mybatis框架共四天第一天:mybatis入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 -------------------------------------- ...

  2. C#中常量\枚举\结构及数组的运用

    又一天结束了,今天在云和学院学习的知识下面继续来做总结. 一.常量\枚举\结构的运用 理论: 常量:const  类型 常量名 = 常量值 确定数量.确定值的几个取值:东西南北.男女.上中下. 枚举: ...

  3. C#学习笔记_12_枚举&结构体

    12_枚举&结构体 枚举 是一种数据类型 适用于某些取值范围有限的数据 语法: [访问权限修饰符] enum 枚举名 { 枚举值 } 枚举名遵循大驼峰命名法 枚举一般情况下是和switch c ...

  4. 5.Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...

  5. Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...

  6. C语言学习笔记--枚举&结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  7. (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作

    Linux 目录结构及文件基本操作 介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux 目录 ...

  8. [C语言]进阶|结构类型: 枚举, 结构, 类型定义

    --------------------------------------------------------------------- 枚举: // main.c #include <std ...

  9. (12)C#枚举,结构

    枚举 枚举类型是类似自定义的一个类,类里放着你自己定义的常量,关键字enum. enum Season{spring,summer,fall,winter} 想用这里的常量的话,首先把变量定义成 Se ...

  10. xBIM 基础02 快速入门

    系列目录    [已更新最新开发文章,点击查看详细]  一.新建项目 Visual Studio 新建项目.项目创建完成后 Nuget ,项目添加 Xbim.Essentials,那么如果项目需要几何 ...

随机推荐

  1. C语言基础回顾

    第一章 C语言基础 1.  C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...

  2. LintCode Interleaving String

    Given three strings: s1, s2, s3, determine whether s3 is formed by the interleaving of s1 and s2. Ex ...

  3. LintCode Merge Sorted Array

    两个排好序的数组, A有m个数, 长度够长, B有n个数, 长度为n, 将B放到A里, 不用buffer数组(临时数组), 就用A将两个合在一起, 同时排好序. 方法: 从右边将两个数组里最大的数取出 ...

  4. 布隆过滤器的概述及Python实现

    布隆过滤器 布隆过滤器是一种概率空间高效的数据结构.它与hashmap非常相似,用于检索一个元素是否在一个集合中.它在检索元素是否存在时,能很好地取舍空间使用率与误报比例.正是由于这个特性,它被称作概 ...

  5. (转)Three challenges you’re going to face when building a chatbot

        转自:https://blog.infermedica.com/three-challenges-youre-going-to-face-when-building-a-chatbot/   ...

  6. javascript跨域、iframe跨域访问

    1.window 对象 浏览器会在其打开一个 HTML 文档时创建一个对应的 window 对象.但是,如果一个文档定义了一个或多个框架(即,包含一个或多个 frame 或 iframe 标签),浏览 ...

  7. BPF and eBPF linux

    http://www.brendangregg.com/blog/2016-10-21/linux-efficient-profiler.html http://www.brendangregg.co ...

  8. c# List去重

    1 list如果数据是值类型,比如list<int> 这种,添加linq之后就可以使用list = list.Distinct().ToList(); 2 如果是数据是引用类型,比如中间是 ...

  9. Lua简介

    Lua是一种扩展语言,脚本语言,还没有主程序的概念,类似于插件,也即不能直接使用,必须嵌入在牛逼的语言里使用,如Python. Lua由C语言编写,可以在宿主语言里写一段c程序,让Lua的解释器使用, ...

  10. http请求报错

    手机端上传base64位图片java后台接受 手机端post方式发送 后台报错: Error parsing HTTP request header Note: further occurrences ...