0Pricing
C# Academy · 课时

关系模式与逻辑模式

在模式中组合条件。

关系模式与逻辑模式 是 CoddyKit 上的免费 C# Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。

关系模式

关系模式使用 <、>、<= 或 >= 将输入与常量进行比较。当比较结果为 true 时,模式会匹配。

关系模式在 C# 9 中引入,可以在切换分支和 is 表达式中简洁地进行范围检查,而无需编写显式比较。

int temp = 18;
string level = temp switch
{
    < 0  => "freezing",
    < 15 => "cold",
    < 25 => "mild",
    _    => "hot"
};
System.Console.WriteLine(level);

结合类型判断的关系模式

关系模式也可以用于 is 表达式,从而生成易读的布尔测试。

n is > 0 几乎可以按英语的方式阅读,并会返回一个 bool 值,您可以在条件、赋值或 LINQ 谓词中使用它。

using System;

class Program {
    static void Main() {
        int score = 82;
        bool passed = score is >= 60;
        Console.WriteLine(passed);
    }
}

逻辑“与”模式

逻辑 and 模式要求两个子模式都匹配。它非常适合表示有界范围。

>= 1 and <= 12 可以匹配包含边界的范围内的值。如果没有 and,就无法在单个模式中表达双向边界。

int month = 6;
bool valid = month is >= 1 and <= 12;
System.Console.WriteLine(valid);

逻辑“或”模式

逻辑 or 模式在任一子模式匹配时就会匹配。它可以将多个可选值组合到一个分支中。

无需为相关情况重复编写分支,'a' or 'e' or 'i' 就可以将它们合并。这样可以让切换表达式更加紧凑,并清楚地表达意图。

char c = 'e';
string kind = c switch
{
    'a' or 'e' or 'i' or 'o' or 'u' => "vowel",
    _ => "consonant"
};
System.Console.WriteLine(kind);

逻辑“非”模式

逻辑 not 模式会在其子模式不匹配时匹配。最常见的用法是 not null。

它也可以否定其他模式,例如 not 0 或 not (> 100),让您能够在单个分支中清晰地表达排除条件。

object? value = "hi";
if (value is not null)
    System.Console.WriteLine("present");

组合逻辑模式

逻辑模式可以组合使用。您可以链接 and、or 和 not 来构建复杂条件,并使用括号控制优先级。

优先级顺序是:not 绑定最紧,其次是 and,最后是 or。只要意图可能不明确,就请添加括号。

using System;

class Program {
    static string Classify(int n) => n switch {
        < 0 or > 100 => "out of range",
        >= 0 and <= 50 => "low half",
        _ => "high half"
    };
    static void Main() => Console.WriteLine(Classify(75));
}

评分中的范围

关系模式和逻辑模式结合起来,可以清晰地表示传统的评分表。

由于分支会从上到下进行检查,您可以使用简单的上限,也可以将边界与 and 结合来明确表示范围。两种写法都有效,请选择更清晰的一种。

using System;

class Program {
    static char Grade(int s) => s switch {
        >= 90 => 'A',
        >= 80 and < 90 => 'B',
        >= 70 and < 80 => 'C',
        _ => 'F'
    };
    static void Main() => Console.WriteLine(Grade(85));
}

使用非空判断的属性模式

将 not null 与类型模式和属性模式结合,可以生成安全且富有表现力的保护条件。

obj is Person { Name: not null } p 会匹配一个非 null 的 Person,且其 Name 也不能为 null,并将其绑定到变量。这样可以避免层层嵌套的 null 检查。

record Person(string? Name);

object obj = new Person("Kai");
if (obj is Person { Name: not null } p)
    System.Console.WriteLine(p.Name);

否定范围

您可以使用 not 和括号来否定一个关系模式组,从而表达排除条件。

not (>= 1 and <= 5) 会匹配 1 到 5 范围之外的任何值。对某些读者而言,这比等价的 < 1 or > 5 更直接。

using System;

class Program {
    static void Main() {
        int n = 9;
        bool outside = n is not (>= 1 and <= 5);
        Console.WriteLine(outside);
    }
}

与类型模式混用

逻辑模式也可以与类型模式结合。o is int or long 可以在一次检查中匹配整数数值类型。

当您需要统一处理多个相关类型时,这种方式非常实用。请注意,or 两侧的类型必须与结果的使用方式兼容。

object o = 5L;
string kind = o switch
{
    int or long => "integral",
    float or double => "floating",
    _ => "other"
};
System.Console.WriteLine(kind);

可读性指南

逻辑模式表达力很强,但也可能变得过于密集。请保持各分支简短,优先使用带有 and 的范围,并在混用 and/or 时加上括号,以提高清晰度。

当条件包含许多子句或外部变量时,使用 when 保护条件可能比编写很长的逻辑模式更易读。请选择最能表达意图的写法。

int n = 42;
string r = n switch
{
    > 0 and < 10 when n % 2 == 0 => "small even",
    _ => "other"
};
System.Console.WriteLine(r);

快速检查

测试您对关系模式和逻辑模式的理解。

回顾

关系模式(< > <= >=)用于与常量进行比较。逻辑模式使用 and、or 和 not 组合子模式。

优先级依次为 not、and、or;混用时请加上括号。接下来我们将介绍列表模式和元组模式。

常见问题解答

「关系模式与逻辑模式」课时是免费的吗?

是的 — 「关系模式与逻辑模式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。

「关系模式与逻辑模式」这节课中我会学到什么?

在模式中组合条件。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「关系模式与逻辑模式」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. switch 表达式
  2. 类型与属性模式
  3. 关系模式与逻辑模式
  4. 列表与元组模式
← 返回 C# Academy