如何用C#模式匹配筛选Email非空且首两种语言为ru、en的Employee
正确实现Employee对象的模式匹配筛选
你的代码报错主要有两个问题:
- Email的非空模式语法错误,C#模式匹配里不能用
!= null的写法,要改用not null。 - 集合匹配方式不对,你需要的是前两个元素严格按顺序为"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
相关产品推荐
相关产品推荐

