轨道
/
C#
C#
/
练习
/
The Weather in Deather
The Weather in Deather

The Weather in Deather

学习练习

简介

表达式主体成员

许多结构体和类的成员(字段是主要的例外)都可以使用表达式主体成员语法。用表达式来定义成员,往往比传统的块或语句更简洁、更易读。

方法和只读属性都属于可以用表达式主体定义的成员。

public int Times3(int input) => input * 3;

public int Interesting => 1729;

switch 表达式

switch 表达式可以把一个值与一组模式中的某个 case 匹配,然后返回关联的值或执行关联的操作。这种关联由=>符号表示。此外,每个模式都可以带一个可选的 case 防护,由when关键字引入。只有 case 防护表达式的求值结果为 true 时,switch 的这条分支才会被选中。这些 case(也叫 switch 分支)按文本顺序依次求值,一旦找到匹配,整个过程就会立即中止,并返回关联的值。

double xx = 42d;

string interesting = xx switch
{
    0 => "I suppose zero is interesting",
    3.14 when DateTime.Now.Day == 14 && DateTime.Now.Month == 3 => "Mmm pie!",
    3.14 => "π",
    42 => "a bit of a cliché",
    1729 => "only if you are a pure mathematician",
    _ => "not interesting"
};

// => interesting == "a bit of a cliché"

三元条件运算符

三元运算符让你能在表达式里定义 if 条件,而不必写成语句块。这与函数式编程的思路一脉相承,通常能让代码更有表现力,也更不容易出错。

三元运算符组合了 3 个表达式:先是一个条件,接着是条件为 true 时求值并返回的表达式(也就是由?引入的if部分),然后是条件为 false 时求值并返回的表达式(也就是由:引入的else部分)。

int a = 3, b = 4;
int max = a > b ? a : b;
// => 4

throw 表达式

throw表达式是throw语句的另一种写法,尤其能增强三元表达式和其他复合表达式的能力。

string trimmed = str == null ? throw new ArgumentException() : str.Trim();

说明

有人请你改进一些与气象站有关的遗留代码。

气象站会接收读数,并输出温度、气压等指标。

1. 提高相关方法的简洁性和可读性

使用表达式主体成员重构WeatherStation类中适合的方法。在合适的地方使用三元运算和 switch 表达式,以增强表达力,并有可能减少错误。

确保所有测试仍然通过。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
C# Exercism

准备好开始 The Weather in Deather 了吗?

注册 Exercism,借助 62 个概念178 个练习 和真人导师指导,学习并掌握 C#,全部免费。