启用.NET断言

碳酸氢钠

如何断言在C#中启用断言?

这是指向Java的相关答案的链接,该答案在C#中不起作用。

这样做的目的是防止使用释放类型的程序集,因为在效率无关紧要的情况下,我可能会在所有断言都起作用的情况下运行,因此在某些情况下,首选调试类型的程序集。

使用Debug.Assert(false)不能令人满意,因为它会创建一个对话框并需要用户交互。知道断言没有“噪声”就可以了。Java解决方案是无噪音的。

编辑:这是从接受的答案下的评论中摘录的。

public static class CompileTimeInformation
{
    public static void AssertAssertionsEnabled()
    {
        // Recall that assertions work only in the debug version of an assembly.
        // Thus the assertion that assertions work relies upon detecting that the assembly was compiled as a debug version.

        if (IsReleaseTypeAssembly())
            throw new ApplicationException("Assertions are not enabled.");
    }

    public static bool IsReleaseTypeAssembly()
    {
        return ! IsDebugTypeAssembly();
    }

    public static bool IsDebugTypeAssembly()
    {
        return
            #if DEBUG
                true
            #else
                false
            #endif
        ;
    }
}
usr

更新:有一个更简单的解决方案。另一个仍然出于好奇。

public static bool AreAssertionsEnabled =
 #if DEBUG
  true
 #else
  false
 #endif
 ;

看起来很讨厌,但是很简单。


首先让我们看一下Debug.Assert在非DEBUG版本中消失的原因

[Conditional("DEBUG"), __DynamicallyInvokable]
public static void Assert(bool condition)
{
    TraceInternal.Assert(condition);
}

[Conditional("DEBUG")]这激发了以下解决方案:

public static bool AreAssertionsEnabled = false;

static MyClassName() { MaybeSetEnabled(); /* call deleted in RELEASE builds */ }

[Conditional("DEBUG")]
static void MaybeSetEnabled()
{
    AreAssertionsEnabled = true;
}

您可能可以重构它,这样AreAssertionsEnabled就可以了readonly我只是现在想不出办法。

现在,您可以检查布尔值AreAssertionsEnabled并根据该值执行您喜欢的任何逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

启用断言时的系统类是什么?

来自分类Dev

在Maven构建的项目中启用断言

来自分类Dev

启用Java断言是否会显着增加内存消耗?

来自分类Dev

如何在CMake Release模式下启用断言?

来自分类Dev

为什么在Java中默认未启用断言?

来自分类Dev

启用Java断言不适用于Eclipse Luna

来自分类Dev

Clojure:如何在全球范围内启用规范断言?

来自分类Dev

启用断言时,JavaMail 1.4总是抛出AssertionError(-ea)

来自分类Dev

如何在 NetBeans 中为 Java EE 项目启用断言?

来自分类Dev

使用代码在 python 中启用/禁用断言语句

来自分类Dev

启用asp.net核心请求验证

来自分类Dev

NET的Aspose.Cells启用数据过滤

来自分类Dev

ASP.NET MVC Nuget启用迁移

来自分类Dev

MenuStrip项目启用/禁用vb.net

来自分类Dev

启用ASP.Net Core会话锁定?

来自分类Dev

使用CheckBox启用CheckBoxList?-ASP.NET

来自分类Dev

使用.net以编程方式启用/禁用LID

来自分类Dev

.Net是否可能已安装但未启用?

来自分类Dev

检查.NET 3.5并启用(如果已禁用)

来自分类Dev

ASP.NET无法启用迁移

来自分类Dev

确认并启用ASP.NET身份用户

来自分类Dev

在 asp.net 中启用或禁用 div

来自分类Dev

Asp.net WebForms 启用角色

来自分类Dev

在 .net core webAPI 中启用 CORS

来自分类Dev

如何在CQ5 / OSGi Bundle(Java)中启用断言?

来自分类Dev

在node.js中启用/禁用断言语句的简单方法

来自分类Dev

我可以使用Gradle在Android的调试版本中启用断言吗?

来自分类Dev

如何在Windows的MAVEN_OPTS中同时设置启用断言和堆大小?

来自分类Dev

检查是否在dart主要功能内启用了断言?