总结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


目录
相关文章
|
3月前
|
Java 程序员 编译器
在Java编程中,if-else与switch语句犹如武林高手的剑与刀
【10月更文挑战第3天】在Java编程中,if-else与switch语句犹如武林高手的剑与刀。本文通过示例展示如何巧妙运用这两种工具,提升代码效率与可读性。从精简if-else结构到高效使用switch语句,再到性能考量,帮助你在不同场景下做出最佳选择,让你的程序更加流畅高效。掌握这些技巧,你将在Java世界中游刃有余!
31 2
|
8月前
【编程题-错题集】kotori和气球(组合数学)
【编程题-错题集】kotori和气球(组合数学)
|
8月前
|
算法 Unix 测试技术
浅谈Rob Pike的五条编程规范
浅谈Rob Pike的五条编程规范
94 0
|
8月前
|
存储 Java
第十四届蓝桥杯集训——字符串函数(基础函数操作)
第十四届蓝桥杯集训——字符串函数(基础函数操作)
63 0
|
Python
【端午趣味征文】有vcs和python吗?来,我教你在波形里画个粽子!
【端午趣味征文】有vcs和python吗?来,我教你在波形里画个粽子!
|
程序员 Python
【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员
最近在各大社交平台看到好多圣诞树,看到大佬们画的圣诞树一个比一个精致,我也特别想尝试画一棵特别的圣诞树。下面是我画的一棵简易的圣诞树,虽然和网络上大佬们的圣诞树相比不是很精致,但是对于萌新们来说,画这样一棵简易的圣诞树还是非常轻松的。 ps:重要的不是圣诞树,重要的是你的心意哦~
287 0
【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员
|
SQL 存储
MySqI——常用语法技巧(刷文虽然枯燥,但受益匪浅 )
MySqI——常用语法技巧(刷文虽然枯燥,但受益匪浅 )
74 0
每日一题——迷你语法分析器
每日一题——迷你语法分析器
72 0
|
程序员 Android开发 iOS开发
程序员五一修图小贴士
程序员五一修图小贴士
168 0
程序员五一修图小贴士
|
安全 Java 编译器
学妹不懂Java泛型,非让我写一篇给她看看(有图为证)
笔者有个学妹就遇到了相同的境遇,学弟被泛型搞得头晕目眩,搞不懂泛型是个啥玩意。天天用的泛型也不知道啥玩意(她可能都不知道她有没有用泛型)。立图为证!当然,笔者深度还欠缺,如果错误还请指正!
150 0
学妹不懂Java泛型,非让我写一篇给她看看(有图为证)