总结C# 常用语法糖

简介: 总结C# 常用语法糖

C# 语法糖是 C# 编程语言中为了简化代码和提高代码可读性而引入的一系列语言特性。这些特性在编译时会被转换成更基本的代码形式,但在编写代码时提供了更加简洁和直观的方式。以下是对 C# 中常见语法糖的一个总结:

1.表达式体属性:使用 => 运算符定义属性的 getter 或 setter。

public string FullName => FirstName + " " + LastName;

2.隐式类型局部变量(var 关键字):编译器根据初始化表达式推断变量的类型。

var number = 42; // 推断为 int 类型

3.Lambda 表达式:定义匿名函数的简洁方式。

Func<int, int, int> add = (x, y) => x + y;

4.表达式体成员:用于方法和委托。

public int Square(int x) => x * x;

5.字符串插值:在字符串中嵌入变量或表达式的值。

string message = $"Hello, {name}!";

6.空合并运算符(??):当左侧操作数为 null 时,返回右侧操作数的值。

string result = value ?? "Default Value";

7.异步/等待(async/await):简化异步编程模型。

public async Task<string> GetWebPageAsync(string url)
  {
      using (var client = new HttpClient())
      {
          return await client.GetStringAsync(url);
      }
  }

8.使用语句(using 声明):自动释放资源,如文件和网络连接。

using (var file = new StreamReader("file.txt"))
  {
      // 读取文件内容
  } // file 对象在这里会被自动释放

9.命名参数:在调用方法时,通过参数名指定参数值,提高代码可读性。

MyMethod(name: "Alice", age: 30);

10.默认参数值:在方法声明中为参数指定默认值。

public void MyMethod(string name = "Default") { /* ... */ }

11.扩展方法:允许你为已存在的类型添加新的方法,而无需创建新的派生类。这使得你可以在不修改原始代码的情况下扩展类的功能。

public static class StringExtensions
  {
      public static string ToUpperInvariant(this string s)
      {
          return s.ToUpper(CultureInfo.InvariantCulture);
      }
  }

12.名称空间别名:允许你为名称空间或类型定义别名,以简化代码中的引用。

using System.Collections.Generic;
using List = System.Collections.Generic.List<int>; // 定义别名
List numbers = new List(); // 使用别名

13.空条件运算符(?.):当左侧的操作数不为 null 时,才访问其成员或调用其方法。这可以避免 NullReferenceException。

string text = null;

int? length = text?.Length; // 如果 text 为 null,则 length 为 null;否则为 text 的长度

14.元组:从 C# 7.0 开始,可以使用 ValueTuple 来创建轻量级的、不可变的数据结构,用于表示具有多个值的单个对象。

var person = (Name: "Alice", Age: 30);
Console.WriteLine(person.Name); // 输出 "Alice"

15.模式匹配:C# 7.0 及更高版本引入了模式匹配功能,包括 is 类型模式和 switch 表达式,使得在条件语句中检查类型和执行相应操作变得更加简洁。

object obj = "hello";
  if (obj is string s)
  {
      Console.WriteLine(s.ToUpper()); // 输出 "HELLO"
  }

16.弃元(Discard):使用下划线 _ 作为占位符来表示不关心的变量值,这在解构赋值或模式匹配中特别有用。

var (first, _) = GetTuple(); // 只关心第一个值,忽略第二个值

17.范围(Range)操作符:C# 8.0 引入了范围操作符 ..,它允许你指定一个序列的子范围。

int[] numbers = { 0, 1, 2, 3, 4, 5 };
int[] subArray = numbers[1..4]; // { 1, 2, 3 }

18.顶级语句:C# 9.0 及更高版本允许在编译单元的顶层直接编写语句,而无需包含在方法或类中。这简化了脚本和小型程序的编写。

using System;
Console.WriteLine("Hello, World!"); // 直接在顶层编写的语句

19.记录(Record)类型:C# 9.0 引入了记录类型,它提供了更简洁的语法来定义不可变数据类型的值语义,并自动实现相等性、哈希码和字符串表示形式。

public record Person(string Name, int Age);

20.可空类型:使用可空类型(如 int?)可以表示值类型的空值,避免了使用默认值来表示空值的问题。

int? age = null;
if (age.HasValue)
{
      // 处理非空值的情况
}

21.nameof 表达式:返回变量、类型或成员的名称作为字符串,主要用于异常消息、日志记录等。

string name = "Alice";
Console.WriteLine(nameof(name)); // 输出 "name"

22.抛出表达式(Throw expressions):允许在表达式中使用 throw 语句,而不仅仅是在语句中。

return someCondition ? someValue : throw new InvalidOperationException();

23.使用声明(Using declarations):从 C# 8.0 开始,可以在代码块内部直接声明 using 变量,而无需在外部声明和初始化。

using var file = new StreamReader("file.txt");
// 使用 file 进行操作...
// 在代码块结束时,file 会被自动释放

24.LINQ(Language Integrated Query):允许你在 C# 中直接编写查询语句,而无需使用额外的查询语言。

var query = from p in people
            where p.Age > 18
            select p.Name;

25.条件编译指令:使用如 #if, #else, #endif 等预处理指令,可以根据不同的编译条件包含或排除代码块。这对于跨平台开发或调试非常有用。

#if DEBUG
    Console.WriteLine("Debug mode is enabled.");
#endif


目录
相关文章
|
算法 数据处理
点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)
点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)
2263 0
点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)
|
图形学 索引
Unity 之 三种抽奖示例
Unity做的三种抽奖的示例,根据需求修改动画时间和效果以及获取概率,文末附示例链接。
1641 0
Unity 之 三种抽奖示例
|
8月前
|
开发框架 .NET C#
Mac安装Visual Studio 2019.dmg详细步骤(附图解,小白也能懂,附安装包)
Visual Studio 2019 for Mac 是微软推出的 macOS 版集成开发环境,支持 C#、.NET、ASP.NET、Xamarin 和 Unity 开发,是 Windows 版的 Mac 适配版本。通过下载 .dmg 文件,拖拽安装至应用程序,首次运行时选择所需组件并完成设置即可使用。支持登录微软账号同步配置,适合 .NET 生态开发者在 Mac 上高效编码。(238 字)
1247 4
|
编译器 API C#
技术心得记录:深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解
技术心得记录:深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解
|
12月前
|
负载均衡 监控 测试技术
【干货满满】高性能API调用方案:如何突破频率限制+异步请求优化
在电商 API 开发中,频率限制常成性能瓶颈。本文提出一套高性能方案,结合异步请求、批量处理、智能限流等技术,显著提升调用效率,突破平台限制,实现稳定高效的数据交互。
|
Android开发 Windows
Android studio 报错Connect to 127.0.0.1:8888 [/127.0.0.1] failed: Connection refused: connect(已解决)
这是一篇关于解决Android Studio报错“Connect to 127.0.0.1:8888 failed: Connection refused”的文章。问题通常因系统代理设置被Android Studio自动保存导致。解决方法是找到系统中Android Studio使用的gradle.properties文件(位于Windows的C:\Users\你的电脑用户名\.gradle或Mac的/Users/.{你的用户目录}/.gradle),删除或注释掉多余的代理配置后保存并重新Sync项目。希望此经验能帮助快速解决同类问题!
2631 36
|
算法 Java 测试技术
深度优化OSS上传性能:多线程分片上传 vs 断点续传实战对比
本文深入解析对象存储服务(OSS)文件上传性能优化技术,重点探讨多线程分片上传与断点续传两种方案。通过理论分析、代码实现和性能测试,对比其在不同场景下的表现差异,并提供选型建议与最佳实践,助力提升大文件上传效率与稳定性。
1185 0
|
机器学习/深度学习 数据采集 数据可视化
TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤
本文介绍了 TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤,包括数据准备、模型定义、损失函数与优化器选择、模型训练与评估、模型保存与部署,并展示了构建全连接神经网络的具体示例。此外,还探讨了 TensorFlow 的高级特性,如自动微分、模型可视化和分布式训练,以及其在未来的发展前景。
1194 5
|
人工智能 并行计算 监控
深入剖析 Qwen2.5 - 32B 模型在 VLLM 上的单机三卡部署与运行
本文深入探讨了Qwen2.5 - 32B模型在VLLM框架上的部署过程,从模型下载、启动命令、资源占用分析到GPU资源分配及CUDA图应用,详述了大模型运行的挑战与优化策略,强调了硬件资源规划与技术调优的重要性。
9031 2