前面的课程,讨论了C#和.NET Framework中的基本数据类型,接下来的几课,我们将讨论代码流程控制的一些语句结构。本课将首先讨论条件语句,也就是if语句结构。

最简单的if语句格式如下。

if (<条件表达式>) 
{
    <语句块>
}

这里,<条件表达式>的运算结果应该是bool类型的值,当其值为true时,执行<语句块>的代码,否则直接执行if语句结构之后的代码(如果还有代码^_^)。如下面的代码。

static void Main(string[] args)
{
    int x = 10;
    if (x % 2 == 0)
    {
        Console.WriteLine("偶数");
    }
}

代码执行会显示“偶数”。像这种在if语句结构中只有一条语句的情况,还可以简化,如下面的两种方式。

if (x % 2 == 0)
    Console.WriteLine("偶数");

if (x % 2 == 0) Console.WriteLine("偶数");

当然,if语句结构中的语句块有多条语句时,就必须使用一对花括号将它们组织起来。

如果需要在条件不成立时也执行一定的代码,可以添加else语句块,如下面的格式。

if (<条件表达式>) 
{
    <语句块1>
}
else
{
    <语句块2>
}

在这个结构中,如果<条件表达式>的值是true,就执行<语句块1>;否则执行<语句块2>。如下面的代码。

static void Main(string[] args)
{
    int x = 99;
    if (x % 2 == 0)
    {
        Console.WriteLine("偶数");
    }
    else
    {
        Console.WriteLine("奇数");
    }
}

代码执行结果会显示“奇数”。同样的,当需要执行的只有一条语句时,也可以进行简写,如下面的两种方式。

if (x % 2 == 0)
    Console.WriteLine("偶数");
else
    Console.WriteLine("奇数");

if (x % 2 == 0) Console.WriteLine("偶数");
else Console.WriteLine("奇数");

下面,我们来看if语句结构的完整语法。

if (<条件表达式1>) 
{
    <语句块1>
}
else if (<条件表达式2>)
{
    <语句块2>
}
else if (<条件表达式N>)
{
    <语句块N>
}
else
{
    <语句块N+1>
}

在这个结构中,如果<条件表达式1>成立则执行<语句块1>;否则,如果<条件表达式2>成员执行<语句块2>;否则,如果<条件表达式N>成员执行<语句块N>;如果所有条件都不成立则执行<语句块N+1>。

实际应用中,else if语句块可以有一个或多个,也可以没有;而else语句块同样可有可无,只是需要注意,else语句块必须在所有else if语句块之后。

下面的代码,我们使用数值表示不同方向,然后使用if语句块进行判断。

static void Main(string[] args)
{
    int dir = 1;
    if (dir == 1)
    {
        Console.WriteLine("上");
    }
    else if (dir == 2)
    {
        Console.WriteLine("右");
    }
    else if (dir == 3)
    {
        Console.WriteLine("下");
    }
    else if (dir == 4)
    {
        Console.WriteLine("左");
    }
    else
    {
        Console.WriteLine("未知方向");
    }
}

代码执行会显示“上”,大家可修改dir的值来查看输出结果。

if语句结构的使用是灵活多变的,大家可以后续的学习和工作中逐渐掌握;下面的代码,我们再来看一个复杂的条件判断。

static void Main(string[] args)
{
    int year = 2018;
    if (year % 400 == 0 || year % 100 != 0 && year % 4 == 0)
    {
        Console.WriteLine("{0}年是闰年", year);
    }
    else
    {
        Console.WriteLine("{0}年不是闰年", year);
    }
}

本例中,我们使用了一个复合条件来判断一个年份是否为闰年,单独来看一下。

year % 400 == 0 || year % 100 != 0 && year % 4 == 0

也许大家对条件判断的逻辑看不太清楚,我们使用括号进行分组再看,如下面的代码。

(year % 400 == 0) || (year % 100 != 0 && year % 4 == 0)

当一个年份是闰年时,可以通过两个条件来判断,首先,如果年份能被400整除,即年份除以400的余数为0时,这个年份就是闰年;另一个条件,当年份不能被100整除,并且可以被4整除时,这个年份也是闰年。也就是说,这两个条件有一个满足,指定的年份就是闰年,大家可以修改year变量的值来观察运行结果。

实际上,对于闰年的判断,我们可以直接使用DateTime.IsLeapYear()方法,如下面的代码。

static void Main(string[] args)
{
    int year = 2018;
    string yesNo = DateTime.IsLeapYear(year) ? "是" : "不是";
    Console.WriteLine("{0}年{1}闰年", year, yesNo);
}

代码中没有使用if语句结构?!是的。

首先,year变量还是保存年份值;再看yesNo变量的值是如何获取的,这里,我们使用了C#中唯一的一个三元运算符(需要三个运算数),即?:运算符,其格式如下:

<条件表达式> ? <表达式1> : <表达式2>

当<条件表达式>的值是true时,运算结果就是<表达式1>的值,否则返回<表达式2>的值;回到前面的示例中,<条件表达式>就是使用DateTime.IsLeapYear()方法来判断年份是否为闰年,根据结果返回“是”或“不是”;最后,我们直接对输入信息进行组合,只需要一条语句就可以显示是闰年或不是闰年的两种情况。

?:运算符可以替代简单的if...else...语句结构,大家可以根据实际情况选择使用。

向左走、向右走,你的代码你作主!if语句是代码流程控制最基本的语句结构之一,在代码编写过程中,可以灵活多变得应用,大家应在实践中多练习、多思考,以便熟练掌握其应用特点。

CHY软件小屋原创作品!