编辑
2025-09-20
C#
00

你是否在C#开发中遇到过这样的场景:需要临时修改某个配置或状态,执行一段业务逻辑后,再将其恢复到原始状态?比如临时切换数据库连接、修改日志级别、调整缓存策略等。

传统做法往往需要手动保存原值、设置新值,最后在 finally 块中恢复,代码繁琐且容易出错。今天给大家介绍一个优雅的解决方案:ScopedValueChanger 工具类,让临时值管理变得简单安全!

🔥 核心痛点分析

😵 传统方式的问题

在实际项目中,我们经常需要:

  • 临时修改配置:测试环境下临时切换数据源
  • 状态管理:临时改变对象属性用于特定逻辑
  • 上下文切换:临时修改全局变量进行局部处理
C#
// 传统繁琐写法 var originalLevel = Logger.Level; try { Logger.Level = LogLevel.Debug; // 临时修改 // 执行需要调试级别的逻辑 DoSomething(); } finally { Logger.Level = originalLevel; // 手动恢复 }
编辑
2025-09-20
C#
00

在.NET开发中,内存管理一直是影响性能的关键因素。传统的字符串处理、数组操作等往往伴随着大量的内存分配和复制操作,这些不必要的开销在高性能场景下尤为明显。

为了解决这个问题,.NET Core 2.1引入了Span和Memory这两个强大的类型,它们能够:

  • 显著减少内存分配
  • 提升数据操作性能
  • 安全地访问连续内存区域
  • 支持多种内存来源的统一操作

Span:栈上分配的高性能利器

Span的本质

Span是一个栈分配的结构体(值类型),它提供了一种不需要额外内存分配就能操作连续内存区域的方法。

编辑
2025-09-20
C#
00

Windows 用户界面 (UI) API 是一组用于创建和管理 Windows 窗口、控件以及处理用户输入的函数和数据结构。这些 API 可以通过 C# 中的 Platform Invocation Services (P/Invoke) 来调用。下面是一些常用的 Windows 用户界面 API,以及它们在 C# 中的使用示例。

MessageBox: 显示一个消息框

C#
[DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type); private void btnMessageBox_Click(object sender, EventArgs e) { string message = "Hello, this is a message!"; string caption = "MessageBox Example"; MessageBox(IntPtr.Zero, message, caption, 0); }
  • hWnd: 父窗口的句柄,如果为 IntPtr.Zero,则消息框将显示在屏幕中央。
  • text: 要显示的消息文本。
  • caption: 消息框的标题。
  • type: 消息框的类型,例如可以是 0 表示普通消息框。
    • 0: 显示一个包含“确定”按钮的消息框。
    • 1: 显示一个包含“确定”和“取消”按钮的消息框。
    • 2: 显示一个包含“中止”、“重试”和“忽略”按钮的消息框。
    • 3: 显示一个包含“是”、“否”和“取消”按钮的消息框。
    • 4: 显示一个包含“是”和“否”按钮的消息框。
    • 5: 显示一个包含“重试”和“取消”按钮的消息框。
    • 6: 显示一个包含“取消”、“重试”和“继续”按钮的消息框。

image.png

SetWindowText: 设置窗口文本

C#
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool SetWindowText(IntPtr hWnd, string lpString); private void btnSetWindowText_Click(object sender, EventArgs e) { IntPtr hwnd = this.Handle; // 获取窗口句柄 SetWindowText(hwnd, "New Window Text"); }
编辑
2025-09-20
C#
00

在C#中,我们可以使用系统的Windows API来进行文件操作,例如创建、读取、写入、删除文件等。下面将介绍如何使用C#调用系统的Windows API来实现文件操作,并提供一些示例代码来说明具体的用法。

创建文件

我们可以使用CreateFile函数来创建一个新的文件。下面是一个示例代码:

CreateFile 是 Windows API 中用于创建或打开文件或 I/O 设备的函数。它的具体参数说明如下:

C#
[DllImport("kernel32.dll", SetLastError = true)] static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);
编辑
2025-09-20
C#
00

在C#中,我们可以使用Windows API来获取系统信息,例如获取CPU信息、内存信息、磁盘信息等。下面我们将演示如何使用C#调用系统Windows API来读取系统信息。

获取CPU信息

  • processorArchitecture: 表示处理器架构,例如 x86、x64 等
  • pageSize: 表示页面大小,通常是内存页面的大小,以字节为单位
  • minimumApplicationAddress: 表示应用程序可以使用的最小内存地址
  • maximumApplicationAddress: 表示应用程序可以使用的最大内存地址
  • activeProcessorMask: 表示活动处理器的位掩码
  • numberOfProcessors: 表示系统中的处理器数量
  • processorType: 表示处理器类型
  • allocationGranularity: 表示内存分配的粒度
  • processorLevel: 表示处理器级别
  • processorRevision: 表示处理器修订版本