练习 - 计算表达式
- 11 分钟
决策逻辑用于通过代码建立替代路径,其中基于表达式的计算决定要遵循的路径。 例如,可以编写能根据用户的输入执行两个路径之一的代码。 如果用户输入字母“a”,代码将执行一个代码块。 如果用户输入字母“b”,代码将执行其他代码块。 在此示例中,你将根据分配给字符串的值控制执行路径。 代码根据表达式、表达式的计算方式以及用于定义路径的基础逻辑来选择执行路径。
检查如何构造和计算表达式是一个很好的开始。
什么是表达式?
表达式是返回一个值的值(文本或变量)、运算符和方法的任意组合。 语句是 C# 中的完整指令,由一个或多个表达式组成。 例如,以下 if 语句包含返回单个值的单个表达式:
if (myName == "Luiz")
你可能始终认为表达式返回的值是数字或字符串。 的确,应用程序开发人员出于不同目的使用不同类型的表达式。 在这种情况下,开发 if 选择语句时,将使用返回或 true 的 false 表达式。 开发人员将此类型的表达式称为布尔表达式。 当代码包含布尔表达式时,返回值始终为单个 true 或 false 值。
布尔表达式非常重要,因为你的代码可以使用这些表达式来决定要执行的代码块。
在布尔表达式中可以使用许多不同类型的运算符。 例如, if 上述语句使用相等运算符 == 来检查是否向特定值分配字符串变量。 所选运算符将取决于可用的代码路径、与路径关联的条件以及基础应用程序逻辑。
计算相等性和不等性
最常见的代码计算之一是检查两个值是否相等。 检查相等性时,将在被检查的两个值之间找到相等运算符 ==。 如果相等运算符两侧的两个值相等,表达式将返回 true。 否则,将返回 false。
相反,你可能还需要检查两个值是否不相等。 若要检查不相等性,将在两个值之间使用不相等运算符 !=。
你可能想知道为什么既需要相等运算符也需要不等运算符。 在学习了如何创建分支语句并开始编写实际代码后,你就会明白原因所在。 使用执行相反任务的两个运算符可以使你的意图更清楚,也更简洁。
现在可以准备编码环境,开始编写计算布尔表达式的代码。
准备编码环境
本模块包括指导你完成生成和运行演示代码的过程的动手活动。 建议使用 Visual Studio Code 作为开发环境来完成这些活动。 使用 Visual Studio Code 来完成这些活动将帮助你在供全球专业人员使用的开发人员环境中更舒适地编写和运行代码。
打开 Visual Studio Code。
可以使用 Windows“开始”菜单(或等效资源 [对于其他 OS])打开 Visual Studio Code。
在 Visual Studio Code 的“文件”菜单上,选择“打开文件夹”。
在“打开文件夹”对话框中,导航到 Windows“桌面”文件夹。
如果使用了其他文件夹位置来保存代码项目,可以改用该文件夹位置。 对于此训练,重要的是要有一个容易找到和记住的位置。
在“打开文件夹”对话框中,选择“选择文件夹”。
如果看到一个询问是否信任作者的安全对话框,请选择“是”。
在 Visual Studio Code 的“终端”菜单上,选择“新终端”。
请注意,“终端”面板中的命令提示符显示当前文件夹的文件夹路径。 例如:
C:\Users\someuser\Desktop>注意
如果你在自己的电脑上工作,而不是在沙盒或托管环境中工作,并且你已经完成此 C# 系列中的其他 Microsoft Learn 模块,那么你可能已经为代码示例创建了一个项目文件夹。 如果是这种情况,可以跳过下一步,该步骤用于在 TestProject 文件夹中创建控制台应用。
在终端命令提示符下,若要在指定文件夹中创建新的控制台应用程序,请输入以下提示:
dotnet new console -o ./CsharpProjects/TestProject此 .NET CLI 命令使用 .NET 程序模板在指定文件夹位置创建新的 C# 控制台应用程序项目。 该命令会自动创建 CsharpProjects 和 TestProject 文件夹,并使用 TestProject 作为
.csproj文件的名称。如果显示一条消息,告知文件已存在,请继续执行后续步骤。 你将重复使用现有的项目文件。
在 EXPLORER 视图中,展开 CsharpProjects 文件夹。
应会看到 TestProject 文件夹和两个文件:一个名为Program.cs的 C# 程序文件和一个名为 TestProject.csproj 的 C# 项目文件。
在 Visual Studio Code 的“文件”菜单上,选择“打开文件夹”。
在 “打开文件夹 ”对话框中,选择 CsharpProjects 文件夹,然后选择“ 选择文件夹”。
在 EXPLORER 视图中,展开 TestProject 文件夹,然后选择 Program.cs。
删除现有代码行。
在本模块中,你将使用此 C# 控制台项目来创建、生成和运行代码示例。
关闭“终端”面板。
使用相等运算符
确保已打开 Visual Studio Code,并且“编辑器”面板中显示了 Program.cs。
注意
Program.cs 应为空。 如果不是,请选择并删除所有代码行。
在 Visual Studio Code 编辑器中键入以下代码。
Console.WriteLine("a" == "a"); Console.WriteLine("a" == "A"); Console.WriteLine(1 == 2); string myValue = "a"; Console.WriteLine(myValue == "a");在 Visual Studio Code 的“文件”菜单上,选择“保存”。
在生成或运行代码之前,必须保存 Program.cs 文件。
在“资源管理器”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。
终端面板将打开。 终端面板应包含一个命令提示符,显示“终端”已打开并转到 TestProject 文件夹位置。
在终端命令提示符处,若要运行代码,请键入 dotnet run,然后按 Enter。
注意
如果看到一条指示“找不到要运行的项目”的消息,请确保终端命令提示符显示预期的 TestProject 文件夹位置。 例如:
C:\Users\someuser\Desktop\csharpprojects\TestProject>你会看到以下输出。
True False False True
使用字符串的内置帮助程序方法来改进字符串相等性的检查
行 Console.WriteLine("a" == "A"); 输出 false,对此你可能会感到惊讶。 比较字符串时,大小写很重要。
另外,请考虑以下代码行:
Console.WriteLine("a" == "a ");
在这里,你在字符串的末尾添加了一个空格。 此表达式还将输出 false。
在某些情况下,在文本之前或之后使用空格字符可能完全可接受。 但是,如果需要接受不精确的匹配项,可以先“美化化”数据。 “美化”数据意味着在执行相等性比较之前需要执行一些清理操作。
例如,考虑在循环中收集用户输入的情况。 输入每个值后,可以向用户提供一个提示以确定他们是否要继续,例如 Do you want to continue (Y/N)?。 如果用户想要继续,他们可能会输入 y 或 Y。 你希望代码可以同等解释这两个值,即使 y 不等于 Y。
在检查两个字符串值是否相等之前,尤其是在用户输入一个或两个值时,应该:
- 对任何字符串值使用
ToUpper()或ToLower()帮助程序方法,确保这两个字符串全部大写或全部小写。 - 对任何字符串值使用
Trim()帮助程序方法,删除前导空格或尾随空格。
可以通过在这两个值上链接这两个帮助程序方法来改进前面的相等性检查,如以下代码列表中所示:
将 Visual Studio Code 编辑器中的代码替换为以下代码:
string value1 = " a"; string value2 = "A "; Console.WriteLine(value1.Trim().ToLower() == value2.Trim().ToLower());保存代码文件,然后使用 Visual Studio Code 运行代码。
请注意,本次代码运行后将输出 True。
使用不相等运算符
使用行注释运算符
//注释掉上一步中的所有代码。在 Visual Studio Code 编辑器中键入以下代码。
Console.WriteLine("a" != "a"); Console.WriteLine("a" != "A"); Console.WriteLine(1 != 2); string myValue = "a"; Console.WriteLine(myValue != "a");保存代码文件,然后使用 Visual Studio Code 运行代码。
你会看到以下输出。
False True True False
如你所料,使用不相等运算符的结果与使用相等运算符的结果相反。 这意味着代码也将以相反的方式进行分支,这可能正是你想要的结果。
计算比较
处理数值数据类型时,需要确定一个值是大于还是小于另一个值。 请使用以下运算符执行这些类型的比较:
- 大于
> - 小于
< - 大于或等于
>= - 小于或等于
<=
当然,用于比较上述字符串值的 == 和 != 运算符在比较数值数据类型时也会起作用。
使用比较运算符
使用行注释运算符
//注释掉上一任务中的所有代码。在 Visual Studio Code 编辑器中键入以下代码。
Console.WriteLine(1 > 2); Console.WriteLine(1 < 2); Console.WriteLine(1 >= 1); Console.WriteLine(1 <= 1);保存代码文件,然后使用 Visual Studio Code 生成并运行代码。
应会看到以下输出:
False True True True
返回布尔值的方法
某些方法返回布尔值(true 或 false)。 在以下练习中,你将对 String 类使用内置的方法,以确定较大的字符串是否包含对你的应用程序重要的特定字词或短语。
注意
某些数据类型具有执行有用实用工具任务的方法。
String 数据类型有很多这样的方法。 其中有几种类型都返回布尔值,包括 Contains()、StartsWith() 和 EndsWith()。 有关详细信息,请参阅 Microsoft Learn 模块“在 C# 中使用字符串类方法操作字母数字数据”。
使用返回布尔值的方法
使用行注释运算符
//注释掉上一步中的所有代码。在 Visual Studio Code 编辑器中键入以下代码。
string pangram = "The quick brown fox jumps over the lazy dog."; Console.WriteLine(pangram.Contains("fox")); Console.WriteLine(pangram.Contains("cow"));保存代码文件,然后使用 Visual Studio Code 生成并运行代码。
你会看到以下输出。
True False
什么是逻辑非?
术语“逻辑非”是指一元求反运算符 !。 有些人称该运算符之为“非运算符”。 将 ! 运算符置于条件表达式(或计算结果为 true 或 false 的任何代码)之前时,它会强制代码反转其对操作数的求值。 应用逻辑非时,如果操作数的计算结果为 true,则计算结果为 false;如果操作数的计算结果为 false,则计算结果为 true。
以下示例有助于查看这些内容之间的联系。 下面两个代码行生成相同的结果。 第二行更为简洁。
// These two lines of code will create the same output
Console.WriteLine(pangram.Contains("fox") == false);
Console.WriteLine(!pangram.Contains("fox"));
使用逻辑非运算符
使用行注释运算符
//注释掉上一步中的所有代码。在 Visual Studio Code 编辑器中键入以下代码。
string pangram = "The quick brown fox jumps over the lazy dog."; Console.WriteLine(!pangram.Contains("fox")); Console.WriteLine(!pangram.Contains("cow"));保存代码文件,然后使用 Visual Studio Code 生成并运行代码。
你会看到以下输出。
False True
不等运算符与逻辑非
不等运算符 != 包含 ! 字符,但不应与逻辑非混淆。 如果操作数不相等,则不等运算符返回 true;如果操作数相等,则返回 false。 对于内置类型的操作数,表达式 x != y 会生成与表达式 !(x == y) 相同的结果(逻辑非示例)。
下面的代码示例演示如何使用 != 运算符:
int a = 7;
int b = 6;
Console.WriteLine(a != b); // output: True
string s1 = "Hello";
string s2 = "Hello";
Console.WriteLine(s1 != s2); // output: False
回顾
以下是你目前学习的有关计算布尔表达式的主要要点:
- 有许多不同类型的表达式,其计算结果为
true或false。 - 使用
==运算符计算相等性。 - 计算字符串的相等性需要考虑字符串可能具有不同的大小写以及前导空格或尾随空格。 根据具体情况,使用
ToLower()或ToUpper()帮助程序方法,并使用Trim()帮助程序方法来提高两个字符串相等的可能性。 - 使用
!=运算符计算不相等性。 - 使用比较运算符(如
>、<、>=和<=)来计算大于、小于和类似的运算。 - 如果方法返回布尔值,则可以将其用作布尔表达式。
- 使用逻辑非运算符
!来计算给定表达式的相反情况。