当前位置: 首页 > news >正文

C# 的一些好用的语法糖介绍

C# 中有很多语法糖(Syntactic sugar),它们是一些语言特性,使得编写代码更加简洁、易读、更具表现力。

Lambda 表达式:
Lambda 表达式允许你编写简洁的匿名函数。例如:

Func<int, int, int> add = (a, b) => a + b;


自动属性:
简化了属性的定义。编译器会自动创建私有字段并生成 getter 和 setter 方法。

public int Age { get; set; }

集合初始化器:
允许你初始化集合类型,使得代码更加清晰。

var list = new List<int> { 1, 2, 3 };

空值合并运算符:
简化了处理可能为 null 的情况。

string name = null;
string result = name ?? "default";


字符串插值:
允许在字符串中直接插入表达式,更加方便地构建字符串。

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


模式匹配:
可以方便地检查对象的类型和属性。

if (obj is MyClass myObj)
{
    // 使用 myObj
}
1
2
3
4
foreach 循环:
简化了遍历集合的过程。

foreach (var item in collection)
{
    // 处理 item
}

using 语句:
确保资源在使用完后被释放,使得代码更加健壮。

using (var stream = new FileStream("file.txt", FileMode.Open))
{
    // 使用 stream
}

扩展方法:
允许你在不修改原始类的情况下向现有类添加方法。

public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}

// 使用扩展方法
bool result = "test".IsNullOrEmpty();

命名参数:
可以在调用方法时指定参数的名称,增加了可读性。

PrintName(firstName: "John", lastName: "Doe");

static void PrintName(string firstName, string lastName)
{
    Console.WriteLine($"{firstName} {lastName}");
}

可空值类型:
允许基本数据类型表示为可空的,用于表示可能为 null 的值。

int? nullableInt = null;

委托:
委托是一种类型,用于引用方法。它们提供了更灵活的事件处理和回调机制。

delegate int Operation(int x, int y);

不可变性:
使用 readonly 和 const 关键字可以创建不可变字段和常量。

readonly int readOnlyValue = 10;
const int constantValue = 5;

模式匹配:
允许在 switch 语句中使用模式来匹配值。

switch (obj)
{
    case MyClass myObj:
        // 使用 myObj
        break;
    case null:
        // 处理 null
        break;
}

属性表达式:
允许你在编译时动态地访问属性和方法。

string propertyName = nameof(MyClass.MyProperty);

相关文章:

  • SLAM基础知识:前端和后端
  • STM32各外设初始化步骤
  • 1、MQ_介绍、优缺点、类型等
  • 前端每日一练:三栏布局,包括 Flex 布局、浮动布局、Grid 布局以及绝对定位布局。
  • 弹性地基梁matlab有限元编程 | 双排桩支护结构 | Matlab源码 | 理论文本
  • 本地项目推送到腾讯云轻量应用服务器教程(并实现本地推送远程自动更新)
  • 设计模式:观察者模式 ⑧
  • 夏目友人帐 第六季特别篇 2017.09.27
  • Android SDK2 (实操三个小目标)
  • Android Q - 应用保活记录(展锐平台)
  • 学习JAVA的第十二天(基础)
  • 进程与线程:通过实际生活来解析计算机的基本运作单位
  • QT绑定信号槽重载
  • VS code下载与使用方法(包含远程调试)
  • anaconda, conda, conda-forge
  • SpringCloud--Sentinel基本概念介绍
  • 如何在Vue项目中应用TypeScript?
  • java 获取项目内的资源/配置文件
  • 第5章---GameplayEffect的使用
  • 算法题 — 三个数的最大乘机
  • 悬疑推理联合书单|虫神山事件
  • 丹麦召见美外交官,强调“不能容忍”美在格陵兰岛间谍活动
  • OpenAI任命了一位新CEO
  • 洞天寻隐·学林纪丨玉洞桃源:仇英青绿山水画中的洞天与身体
  • 马新民卸任外交部条约法律司司长
  • 60岁济南石化设计院党总支书记、应急管理专家李有臣病逝