gpt4 book ai didi

.net - 是什么让 CLR 显示断言?

转载 作者:行者123 更新时间:2023-12-02 07:56:42 25 4
gpt4 key购买 nike

如果我在 visual studio 中为我的 C# 项目定义调试常量,我可以确定断言将被评估并在它们失败时显示一个消息框。但是什么标志、属性使得 CLR 在运行时实际上 决定是否评估和显示一个断言。当定义了 DEBUG 时,断言代码不会在 IL 中结束吗?还是 DebuggableAttribute.DebuggingModes在程序集的 DebuggableAttribute 中标记关键点?如果是这样,它的枚举值必须是多少?这是如何工作的?

最佳答案

如果您在未定义 DEBUG 预处理器符号的情况下进行编译,则编译代码中将省略对 Debug.Assert 的任何调用。

如果您查看 docs for Debug.Assert你会看到它在声明中有 [ConditionalAttribute("DEBUG")]ConditionalAttribute用于决定是否在编译时实际发出方法调用。

如果条件属性意味着不进行调用,则也将忽略任何参数评估。这是一个例子:

using System;
using System.Diagnostics;

class Test
{
static void Main()
{
Foo(Bar());
}

[Conditional("TEST")]
static void Foo(string x)
{
Console.WriteLine("Foo called");
}

static string Bar()
{
Console.WriteLine("Bar called");
return "";
}
}

当定义了 TEST 时,两种方法都会被调用:

c:\Users\Jon> csc Test.cs /d:TEST
c:\Users\Jon> test.exe
Bar called
Foo called

当未定义 TEST 时,两者都不会被调用:

c:\Users\Jon> csc Test.cs /d:TEST
c:\Users\Jon> test.exe

关于.net - 是什么让 CLR 显示断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/570153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com