目录

1. nameof:编译时获取名称

2. default:泛型中的智能默认值

3. when:模式匹配中的过滤条件

4. stackalloc:栈上内存分配

5. ref, in, out, ref readonly:参数传递控制

6. fixed:固定托管变量

7. using:现代化使用方式

8. init:仅初始化设置器

9. record:记录类型

10. partial:分部类型和方法


随着开发者在职业生涯中的成长,他们学会编写的不仅仅是能工作的代码,更是整洁、可维护且优化的代码。在C#中,有许多强大的关键字和特性被许多初级甚至中级开发者所忽视。本文将介绍10个高级开发者经常使用的关键字,并解释如何开始使用它们来提升你的代码水平。

1. nameof:编译时获取名称

nameof 关键字在编译时返回变量、属性或类型的名称作为字符串。

Console.WriteLine(nameof(Customer.FirstName)); // 输出: "FirstName"

2. default:泛型中的智能默认值

default 关键字返回给定类型的默认值。在C# 7.1及更高版本中,你可以在许多上下文中使用该类型。

T value = default; // 替代 default(T)

3. when:模式匹配中的过滤条件

when 子句为switch语句和模式匹配添加过滤逻辑。

switch (user)
{
    case Admin a when a.Level > 5:
        Console.WriteLine("Super Admin");
        break;
}

4. stackalloc:栈上内存分配

直接在栈上为临时数组分配内存,减少垃圾回收开销。

Span<int> buffer = stackalloc int[128];

5. refinoutref readonly:参数传递控制

这些关键字控制参数的传递方式:按值传递、按引用传递,以及是否可以被修改。

void Calculate(in int input, out int result)
{
    result = input * 2;
}

6. fixed:固定托管变量

在非安全上下文中使用,用于固定托管变量,使其内存地址保持不变。

unsafe
{
    fixed (int* ptr = &array[0])
    {
        // 原生互操作或指针运算
    }
}

7. using:现代化使用方式

传统的using语句,现代C#允许你使用 using var 进行自动释放,并导入静态成员。

using var reader = new StreamReader("data.txt");
using static System.Console;
WriteLine("Hello");

8. init:仅初始化设置器

使用仅初始化设置器,你可以在初始化期间赋值,但不能在之后修改,强制实现不可变性。

public string Name { get; init; }

var user = new User { Name = "Kamlesh" };

9. record:记录类型

记录类型简化了不可变模型的创建,具有内置的值相等性、克隆和解构功能。

public record Person(string Name, int Age);

10. partial:分部类型和方法

允许你将类或方法的定义拆分到多个文件中。

partial class Customer
{
    partial void OnCreated(); // 可选的钩子方法
}

掌握这些不太为人知的C#关键字不仅能帮助你编写更整洁的代码,更能帮助你像高级开发者一样思考。这些工具能够解锁性能、可读性和可维护性。从今天开始将它们融入你的工作中,你很快就能脱颖而出,成为真正理解这门语言而不仅仅是掌握基础的人。

引入地址

更多推荐