C#学习记录——复杂的变量类型:枚举、结构和数组

『好好学习,天天向上。』—— 毛主席语录
今天继续学习《C#入门经典》的第五章第二节。

复杂的变量类型

除了简单的变量类型,C#还提供了3个比较复杂的变量:枚举、结构和数组。

枚举

定义一个类型,其取值范围是用户提供的值的有限集合。
注意有一个附加步骤——不是仅声明一个给定类型的变量,而是声明和描述一个用户定义的类型,再声明这个新类型的变量。
定义枚举
语法:访问修饰符enum枚举名{值1,值2…}
1、枚举是一组描述性的名称
2、枚举定义一组有限的值,不能包含方法
3、对可能的值进行约束
4、枚举允许描述性名称表示整数值

可以用enum关键字定义枚举:
enum<typeName>
{
<value1>
<value2>
<value3>

<valueN>
}
接着声明这个新类型的变量:
<typeName><varName>;
并赋值:
<varName>=<typeName>.<value>;
枚举使用一个基本类型来存储。枚举类型可取的每个值都存储为该基本类型的一个值,默认情况下该类型为int。在枚举声明中添加类型,就可以指定其他基本类型:
enum<typeName>:<underlyingType>
{
<value1>
<value2>
<value3>

<valueN>
}
枚举的基本类型可以是byte、sbyte、short、ushort、int、uint、long和ulong。
默认情况下,每个值都会根据定义的顺序(从0开始),被自动赋予对应的基本类型值。这意味着<value1>的值是0,<value2>的值是1,<value3>的值是0,等等。可以重写这个赋值过程:使用=运算符,指定每个枚举的实际值:
enum<typeName>:<underlyingType>
{
<value1>=< actualVal1>,
<value2>=< actualVal2>,
<value3>=< actualVal3>,

<valueN>=< actualValN>,
}
还可以使用一个值作为另一个枚举的基础值,为多个枚举指定相同的值:
enum<typeName>:<underlyingType>
{
<value1>=< actualVal1>,
<value2>=<value1>,
<value3>,

<valueN>=< actualValN>,
}
未赋值的任何值都会自动获取一个初始值,这里使用的值是从比上一个明确声明的值大1开始的序列。例:上面<value3>的值是<value1>+1。
练一练:枚举的使用
(1)将以下代码添加到Program.cs中:

using System;

namespace L013_ConsoleApp10
{
    enum orientation:byte
    {
        north=1,south=2,east=3,west=4
    }
    class Program
    {
        static void Main(string[]args)
        {
            orientation myDirection = orientation.north;
            Console.WriteLine($"myDirection={myDirection}");
            Console.ReadKey();
        }
    }
}

(2)运行程序,结果如下图:
在这里插入图片描述
(3)退出应用程序,修改代码,如下所示:

using System;
namespace L013_ConsoleApp10
{
    enum orientation:byte
    {
        north=1,south=2,east=3,west=4
    }
    class Program
    {
        static void Main(string[]args)
        {
            byte directionByte;
            string directionString;
            orientation myDirection = orientation.north;
            Console.WriteLine($"myDirection={myDirection}");
            directionByte = (byte)myDirection;
            directionString = Convert.ToString(myDirection);
            Console.WriteLine($"byteequivalebt={directionByte}");
            Console.WriteLine($"stringequivalebt={directionString}");
            Console.ReadKey();
        }
    }
}

(4)再次运行应用程序,输出如下图:
在这里插入图片描述

结构

结构就是由几个数据组成的数据结构,这些数据可能具有不同的类型。
定义结构
使用struct关键字定义结构,如下所示:
struct
{

}
部分包含变量的声明(称为结构的数据成员),其格式与前面的变量声明一样。其格式与前面的声明一样。每个成员的声明都采用如下形式:
;
要让调用结构的代码访问该结构的数据成员,可以对使用关键字public。

数组

数组是一个变量的索引列表,存储在数组类型的变量中。

1、声明数组

语法结构:
[];
其中,可以是任何变量类型,包括枚举和结构。数组必须在访问之前初始化,不能像下面这样访问数组或给数组元素赋值:

int[]myIntArray;
myIntArray[10]=5;

数组的初始化有两种方式。可以字面值形式指定数组的完整内容,也可以指定数组的大小,再使用关键字new初始化所有数组元素。
要使用字面值指定数组,只需要提供一个用逗号分隔的元素值列表,该列表放在花括号中,例如:

int[]myIntArray={6,9,10,2,99};

其中myIntArray有5个元素,每个元素都被赋予一个整数值。
另一种方式需要使用下述语法:

int[]myIntArray=new int[5];

这里使用关键字new显示地初始化数组,用一个常量值定义其大小。这种方式会给所有数组元素赋予同一个默认值,对于数值类型来说,其默认值是0。也可以使用非常量的变量来进行初始化,例如:

int[]myIntArray=new int[arraySize];

还可以组合使用这两种初始化方式:

int[]myIntArray=new int[5]{6,9,10,2,99};

使用这种方式,数组大小必须与元素个数相匹配。
如果使用变量定义其大小,该变量必须是一个常量,例如:

const int arraySize=5;
int[]myIntArray=new int[arraySize]{6,9,10,2,99};

如果省略了关键字const,运行这段代码就会失败。
练一练:使用数组
(1)将以下代码添加到Program.cs中:

using System;

namespace L014_ConsoleApp11
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] friendNames = { "Todd Alei", "Kevin Alei", "Shane Alei" };
            int i;
            Console.WriteLine($"Here are {friendNames.Length}of my friends:");
            for (i=0;i<friendNames.Length;i++)
            {
                Console.WriteLine(friendNames[i]);
            }
            Console.ReadKey();
        }
    }
}

(2)执行代码,结果如下:
在这里插入图片描述
示例说明
这段代码用3个值建立了一个string数组,并在for循环中把它们列在控制台上。使用friendName.Length来确定数组中的元素个数:
Console.WriteLine($“Here are {friendNames.Length}of my friends:”);
这是获取数组大小的简便方法。

2、foreach循环

foreach循环可以使用一种简便的语法来定位数组中的每个元素:

foreach<baseType><name>in <array>{
//can use<name>for each element
}

这个循环会迭代每个元素,依次把每个元素放在变量中,且不存在访问非法元素的危险。不需要考虑数组中有多少个元素,并可以确保将在循环中使用每个元素。
foreach循环和标准的for循环的主要区别在于:foreach循环对数组内容进行只读访问,所以不能改变任何元素的值。使用简单的for循环,就可以给数组元素赋值。

3、多维数组

多维数组是使用多个索引访问其元素的数组。
二维数组可以声明如下:

<baseType>[,]<name>;

多维数组只需要更多逗号,例如:

<baseType>[,,,]<name>;

该语句声明了一个4维数组。赋值也使用类似的语法,用逗号分隔大小。
在这里插入图片描述

4、数组的数组

声明数组的数组时,其语法要求在数组声明中指定多个方括号对:

int[][]jaggedIntArray

齿轮数组的语法太复杂了,没仔细看,以后有需要再详细看吧。/捂脸/捂脸

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷工笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值