You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#模式匹配筛选Email非空且首两种语言为ru、en的Employee

正确实现Employee对象的模式匹配筛选

你的代码报错主要有两个问题:

  1. Email的非空模式语法错误,C#模式匹配里不能用!= null的写法,要改用not null。
  2. 集合匹配方式不对,你需要的是前两个元素严格按顺序为"ru"和"en",直接写{ "ru", "en" }是无序的集合包含匹配,不符合需求,且无法指定位置。

下面是修复后的代码,同时增加了对Languages非空和元素数量的检查,避免空引用或索引越界:

public static string IsRuEnWithEmail(Employee emp) => emp switch
{
    { 
        Email: not null, 
        Languages: { 
            not null, 
            Count: >= 2, 
            [0]: "ru", 
            [1]: "en" 
        } 
    } => $"{emp.FCs}, {emp.Email}, {emp.Role}",
    _ => "",
};

代码说明:

  • Email: not null:正确匹配Email不为null的情况。
  • Languages: { not null, Count: >= 2 }:先确保Languages本身不为null,且至少有2个元素,防止后续索引访问出错。
  • [0]: "ru", [1]: "en":通过索引模式精确匹配集合的第一个和第二个元素值,满足顺序要求。

如果你的项目使用C# 9及以下版本,索引模式的写法需要调整为完整的属性访问:

public static string IsRuEnWithEmail(Employee emp) => emp switch
{
    { 
        Email: not null, 
        Languages: not null, 
        Languages.Count: >= 2, 
        Languages[0]: "ru", 
        Languages[1]: "en" 
    } => $"{emp.FCs}, {emp.Email}, {emp.Role}",
    _ => "",
};

内容的提问来源于stack exchange,提问作者vcdk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:35:28