在发布版本 (C#) 中如何停止对调试函数调用中的参数求值

adr*_*dey 4 c# debugging release visual-studio

我有一些代码中充斥着类似于以下的调试表达式:

System.Diagnostics.Debug.WriteLine(System.BitConverter.ToString(data.Take(32).ToArray()));
Run Code Online (Sandbox Code Playgroud)

我能做些什么来防止发布版本评估System.BitConverter.ToString(data.Take(32).ToArray())

我添加了自己的调试类,允许我WriteLine()根据我想要的报告级别来控制调用,但即使在发布模式下,这两种方法也会评估 Linq 和字符串转换(不是吗)?

---稍后添加---

正如我上面所说,代码中有很多这样的行,我并不特别想把#if DEBUG它们全部都写出来。

我想知道如何避免在 Release 模式下评估 Linq 和 BitConverter,我认为这会影响性能。

Jep*_*sen 8

你什么都不用做!对传递给方法的参数求值ConditionalAttribute已经被抑制。

有关权威文档,请参阅C# 语言规范中的条件属性部分。引用:

[...] 调用(包括调用参数的评估)被省略。

要查看该方法实际上带有ConditionalAttribute,请参阅Debug.WriteLine(string)文档