当未定义Debug符号时,等效于Debug.Assert()
本文关键字:Debug Assert 未定义 符号 | 更新日期: 2023-09-27 18:21:16
我正在寻找一种语法,该语法将测试表达式,并在结果为false且缺少DEBUG
符号时引发异常。但当它在那里的时候就不会了。
我知道我可以使用:
#if !DEBUG
Trace.Assert(condition);
#endif
我知道我可以使用:
#if !DEBUG
SomeGlobal.Production = true;
#endif
所以我可以写:
Trace.Assert(SomeGlobal.Production && condition);
以避免将编译指令放在不同的位置。
还有别的办法吗?
[Conditional("RELEASE")]
public static void AssertRelease(bool condition)
{
Trace.Assert(condition);
}
并确保在RELEASE配置中定义"RELEASE",
ConditionalAttribute是一个很好的方法。
向编译器指示,除非定义了指定的条件编译符号,否则应忽略方法调用或特性。
就像Debug.Assert一样,如果不满足条件,编译器将忽略对此方法的调用。
试试这个:
#if !DEBUG
#define NOTDEBUG
#endif
namespace Test123
{
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
var someCondition = false;
Trace(someCondition);
}
[Conditional("NOTDEBUG")]
static void Trace(bool condition)
{
if (!condition)
{
throw new Exception();
}
}
}
}
参见:
http://msdn.microsoft.com/en-gb/library/aa288458(v=vs.71).aspx