c# - 日志语句避免计算参数

标签 c#

在 C# 中有一种方法可以避免计算昂贵的参数。

例子

DebugLog(object.getName());

如果我想避免调用 getName(比如说它很昂贵),我必须这样做

#if DEBUG
DebugLog(object.getName());
#endif

在其他语言中,我可以制作一个日志宏,如果日志级别是某种特定的方式,那么它就是一个空操作

DebugLog(anything i want as it just is skipped)

除了让每一个日志都有丑陋的定义之外,还有其他方法吗?

最佳答案

In 可以在条件属性的帮助下完成。例如。如果您有 [ConditionalAttribute("DEBUG")],并且未定义 DEBUG,则跳过整个函数调用,包括参数评估。

例如,这就是 Debug.Assert有效。

比如这段代码

static void Main()
{
    Log(F());
}

[ConditionalAttribute("DEBUG")]
static void Log(string s)
{
    Console.WriteLine(s);
}

static string F()
{
    Console.WriteLine("foo");
    return "bar";
}

输出

foo
bar

在 Debug 配置中,定义了 DEBUG,而在 Release 配置中没有定义。

关于c# - 日志语句避免计算参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876354/

相关文章:

c# - 使用 Receive[...]Async 方法时获取远程端点信息 - 仅供引用

c# - 当我在 DataGridTemplateColumn.CellTemplate 中使用 TextBox 时,DataGrid.BeginningEdit 事件未触发

c# - MVC EF 数据库存储库模式

c# - EF 4.3 代码优先 : Table per Type (TPT) with Composite Primary Key and Foreign Key

c# - 这种缓慢的 WPF TextBlock 性能是否符合预期?

c# - 类中的属性与公共(public)声明变量

java - 我可以在 Android 中部分更改此文本的颜色吗?

c# - 通过编码将模板分配给 "__Base template"?

c# - 部署 Windows 8 应用程序

C#保护数据库连接信息