Conditional特性根据编译符号决定是否编译void方法调用,如[Conditional("DEBUG")]使Log仅在定义DEBUG时生效;支持多条件叠加,彻底移除未满足条件的调用以避免运行时开销。

Conditional特性用于根据编译符号(如 DEBUG、TRACE 等)来决定是否编译某个方法调用。它常用于控制调试或日志代码的执行,只在特定编译条件下包含这些代码。
给方法加上 [Conditional("DEBUG")] 后,该方法的调用将只在定义了对应符号(例如 DEBUG)时才会被编译进最终程序集。如果没有定义,则调用会被完全移除,相当于没有这行代码。
注意:Conditional 特性只能应用于返回类型为 void 的方法。
#define DEBUG
using System;
using System.Diagnostics;
class Program
{
[Conditional("DEBUG")]
public static void Log(string message)
{
Console.WriteLine("[LOG] " + message);
}
static void Main()
{
Log("程序开始"); // 只有在定义 DEBUG 时才执行
DoWork();
Log("程序结束");
}
static void DoWork() { }
}
如果去掉 #define DEBUG,所有 Log 调用都会被编译器自动移除,不会产生任何调用开销。
可以使用多个 Conditional 特性,表示方法在任一符号被定义时都应编译:
[Conditional("DEBUG")]
[Conditional("TRACE_LOG")]
public static void TraceLog(string msg)
{
Console.WriteLine("[TRACE] " + msg);
}
只要定义了 DEBUG 或 TRACE_LOG,调用就会保留。
基本上就这些。这个特性帮你写出更干净、无运行时判断开销的条件执行代码。以上就是C# Conditional特性有什么用 - 根据编译符号决定是否编译方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号