C#9新特性增强的模式匹配
C# 9 中增强了模式匹配的用法,增加了 and / or / not 操作符,而且可以直接判断属性,来看一下下面的这个示例:
var person = new Person();
// or
// string.IsNullOrEmpty(person.Description)
if (person.Description is null or { Length: 0 })
{
Console.WriteLine(${nameof(person.Description)} is IsNullOrEmpty);
}
// and
// !string.IsNullOrEmpty(person.Name)
if (person.Name is not null and { Length: > 0 })
{
if (person.Name[0] is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.')
{
}
}
// not
if (person.Name is not null)
{
}
这里的代码使用 DnSpy 反编译之后的代码是下面这样的:
Person person = new Person();
string text = person.Description;
bool flag = text == null || text.Length == 0;
if (flag)
{
Console.WriteLine(Description is IsNullOrEmpty);
}
text = person.Name;
bool flag2 = text != null && text.Length > 0;
if (flag2)
{
char c = person.Name[0];
if (c >= 'a')
{
if (c > 'z')
{
goto IL_8B;
}
}
else if (c >= 'A')
{
if (c > 'Z')
{
goto IL_8B;
}
}
else if (c != ',' && c != '.')
{
goto IL_8B;
}
bool flag3 = true;
goto IL_8E;
IL_8B:
flag3 = false;
IL_8E:
bool flag4 = flag3;
if (flag4)
{
}
}
bool flag5 = person.Name != null;
if (flag5)
{
}
这不仅适用于 is 也可以在 switch 中使用
switch (person.Age)
{
case >= 0 and <= 3:
Console.WriteLine(baby);
break;
case > 3 and < 14:
Console.WriteLine(child);
break;
case > 14 and < 22:
Console.WriteLine(youth);
break;
case > 22 and < 60:
Console.WriteLine(Adult);
break;
case >= 60 and <= 500:
Console.WriteLine(Old man);
break;
case > 500:
Console.WriteLine(monster);
break;
}
反编译后的代码:
int age = person.Age;
int num = age;
if (num < 22)
{
if (num < 14)
{
if (num >= 0)
{
if (num > 3)
{
Console.WriteLine(child);
}
else
{
Console.WriteLine(baby);
}
}
}
else if (num > 14)
{
Console.WriteLine(youth);
}
}
else if (num < 60)
{
if (num > 22)
{
Console.WriteLine(Adult);
}
}
else if (num > 500)
{
Console.WriteLine(monster);
}
else
{
Console.WriteLine(Old man);
}
可以看到有些情况下可以简化不少代码,尤其是 if 分支比较多的情况下使用上面 switch 这样的写法会清晰很多。
同类资源
- 增强读写配置模块
易语言增强读写配置模块例子,添加模块应用后直接可以查看具体的使用方法了,如果指定配置文件不存在,将会自动...
- 注册表操作增强模块
易语言注册表操作增强模块例子,添加模块应用后直接可以查看具体的使用方法了,还没对所有功能测试,大家帮忙测...
- 信息框方框Ex模块增强版
易语言信息框方框Ex模块增强版例子,添加模块应用后直接可以查看具体的使用方法了,界面看上去挺好看的,但是宽...
- Topaz Video Enhance AI 2.1.0汉化文件AI视频增强放大
AI提供技术的视频质量增强软件,在使用该软件的时候不仅可以轻轻松松的帮助用户将任意视频随意的进行分辨率...
- 取中间文本模块增强版,可取多个文本
易语言取中间文本模块增强版,可取多个文本例子源代码,解决多次取文本中间问题,返回文本需分割。...
- LED液晶控件模块增强版
易语言LED液晶控件模块增强版例子,显示自定义位数的led数字。...
- HPSocket增强模块HPSocketPlus
易语言HPSocket增强模块HPSocketPlus例子源代码,基于HP-Socket5.6.2二次封装加强的模块。...
- EtPP控制台增强模块
易语言EtPP控制台增强模块例子源代码,更多的输出样式,支持直接切换颜色/日志式分行、单字输出。...
- JSON动态支持库模块1.0_VC无增强指令
易语言JSON动态支持库例子源代码,C语言编写JSON库测试了下。...
- Robocopy复制增强工具
易语言Robocopy复制增强工具例子源代码,原版是cmd模式的命令,简单写了个GUI,简单功能都有了。...
- 原EtPP模块TerminalPlus易语言控制台输入/输出增强模块
原EtPP模块TerminalPlus易语言控制台输入/输出增强模块例子源代码,在输出内容之前加上当前时间,用于日志式...
- Et++易语言控制台增强模块,多模式输出/输入常用功能
Et++易语言控制台增强模块,多模式输出/输入常用功能例子源代码,支持控制台清屏、换色、输出换色、设置标题...