NX Blog - DotNet
type: channel
link: https://blog.nxsir.cn/index.php/tag/DotNet/
items: C#委托和匿名方法
items: C#中的Return Switch写法

C#委托和匿名方法
type: item
date: 2024-01-23T10:51:00+08:00
description: 在C#中，委托是一种强大的类型，允许将方法作为参数传递，从而实现回调和事件处理等功能。本文将首先介绍委托的基础概念，然后深入探讨匿名方法和 Lambda 表达式，这两者是在C#中使用委托时的有力补充。{mtitle title="委托基础"/}using System; // 定义委托 delegate void MyDelegate(int x); class Program { static void Main() { // 创建委托实例并关联方法 MyDelegate myDelegate = new MyDelegate(PrintNumber); // 调用委托，实际上调用了关联的方法 myDelegate(42); } // 委托关联的方法 static void PrintNumber(int num) { Console.WriteLine("Number: " + num); } }上面的例子中，我们定义了一个委托 MyDelegate，它可以引用带有一个整数参数的方法。然后，我们创建了委托的实例，并将其关联到 PrintNumber 方法上，最终通过调用委托来执行方法。{mtitle title="匿名方法的应用"/}匿名方法是一种没有显式命名的方法，通常用于传递给委托或事件处理程序。它允许在需要时直接定义和使用方法，而无需为其命名。using System; class Program { delegate void MyDelegate(int x); static void Main() { // 使用匿名方法创建委托实例 MyDelegate myDelegate = delegate (int x) { Console.WriteLine("匿名方法被调用，参数为: " + x); }; // 调用委托 myDelegate(10); } } 在这个例子中，我们使用匿名方法创建了一个委托实例，它会在调用时输出参数的信息。{mtitle title="引出Lambda表达式"/}Lambda 表达式是C# 3.0及更高版本引入的一项功能，用于更简洁地表示匿名方法。它进一步简化了代码，使得处理委托变得更加方便。using System; class Program { delegate void MyDelegate(int x); static void Main() { // 使用 Lambda 表达式创建委托实例 MyDelegate myDelegateLambda = (int x) => { Console.WriteLine("Lambda 表达式被调用，参数为: " + x); }; // 调用委托 myDelegateLambda(20); // Lambda 表达式的更简洁形式 MyDelegate conciseLambda = x => Console.WriteLine("更简洁的 Lambda，参数为: " + x); conciseLambda(30); } } Lambda 表达式在语法上更为紧凑，使得代码更易读且更简洁。在处理简单的委托场景时，Lambda 表达式是更推荐的选择。{card-describe title="卡片描述"}通过委托、匿名方法和 Lambda 表达式，C# 提供了丰富的工具来处理方法引用和回调，使得代码更加灵活和可维护。在选择使用匿名方法或 Lambda 表达式时，可以根据代码的复杂性和可读性来做出合适的选择。{/card-describe}

C#中的Return Switch写法
type: item
date: 2024-01-23T10:24:00+08:00
description: C#中的Return Switch写法在C#中，处理条件分支时，我们经常会使用 switch 语句。在这篇博客文章中，我们将探讨传统的 switch 写法和一种更简洁、易读的 return switch 写法，并比较它们之间的区别和优势。原始写法首先，让我们看一下传统的 switch 写法：public static string GetDayOfWeek(int dayNumber) { string dayName = ""; switch (dayNumber) { case 1: dayName = "Sunday"; break; case 2: dayName = "Monday"; break; // ... 其他case ... default: dayName = "Invalid Day Number"; break; } return dayName; }在这个例子中，我们使用 switch 语句根据输入的 dayNumber 返回相应的字符串，处理了每个可能的情况，最后使用 default 处理了没有匹配的情况。引入Return Switch写法尽管上面的写法是有效的，但我们可以通过使用 return switch 表达式来使代码更加紧凑和可读。public static string GetDayOfWeek(int dayNumber) { return dayNumber switch { 1 => "Sunday", 2 => "Monday", // ... 其他case ... _ => "Invalid Day Number" }; }在这个写法中，我们直接在 return 语句中使用了 switch 表达式。每个情况都通过 => 关联一个结果，而 _则表示默认情况。区别与优势1. 简洁性原始写法： 需要声明变量，然后在每个 case 中赋值，最后返回该变量。Return Switch写法： 直接通过表达式返回结果，减少了冗余。2. 可读性原始写法： 使用 break 中断每个 case，需要额外的 default 处理默认情况。Return Switch写法： 表达式直观，减少了冗余语法，提高了可读性。3. 默认情况原始写法： 使用 default 处理没有匹配的情况。Return Switch写法： 使用 _表示默认情况，更加清晰。{callout color="#ef4d4d"}注意：此写法在C#8.0后才支持{/callout}总结通过使用 return switch 写法，我们可以更清晰、更简洁地处理条件分支，提高了代码的可读性。这种写法在处理简单的情况分支时特别有用，使代码更加优雅。在选择条件分支写法时，可以根据具体情况来考虑使用 return switch 的简便性和清晰性。