内插字符串处理器与自定义日志格式化
利用 InterpolatedStringHandler 实现条件日志、安全格式化与零分配构建 · 难度:入门 · +10XP
内插字符串处理器与自定义日志格式化
InterpolatedStringHandlerAttribute(C# 10)允许编译器将 $”” 内的表达式逐个传递给你定义的处理程序。本教程构建一个日志处理器,只在日志级别启用时才真正格式化参数,避免昂贵的 ToString() 调用。还会展示如何捕获表达式对象以便延迟序列化、如何在处理器中拼接 Span
[InterpolatedStringHandler]
public ref struct LogHandler
{
private StringBuilder _builder;
public void AppendLiteral(string s) => _builder.Append(s);
public void AppendFormatted<T>(T t, string format = null) {
if (LogLevel.Enabled) _builder.Append(t?.ToString());
}
}
public static void Log(LogLevel level, ref LogHandler handler) { }