当未定义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);

以避免将编译指令放在不同的位置。

还有别的办法吗?

当未定义Debug符号时,等效于Debug.Assert()

[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