考虑以下代码:
if (IsDebuggingEnabled) {
instance.Log(GetDetailedDebugInfo());
}
GetDetailedDebugInfo()
可能是一个开销较大的方法,因此我们只想在运行于调试模式下时才调用它。
现在,更为简洁的选择是编写如下代码:
instance.Log(() => GetDetailedDebugInfo());
在定义了.Log()的地方:
public void Log(Func<string> getMessage)
{
if (IsDebuggingEnabled)
{
LogInternal(getMessage.Invoke());
}
}
我的关注点是性能,初步测试并未显示第二种情况特别昂贵,但如果负载增加,我不想遇到任何意外。
哦,而且请不要建议条件编译,因为它不适用于这种情况。
(附言:我直接在StackOverflow的“提问”文本区域中编写了代码,如果有微妙的错误并且无法编译,请不要责怪我,你明白我的意思 :)