为什么.NET的条件属性会导致副作用被消除?

2024-02-19

我读到了关于Conditional今天的属性。根据 MSDN:

正在申请ConditionalAttribute方法的调用指示编译器不应将对该方法的调用编译为 Microsoft 中间语言 (MSIL),除非与关联的条件编译符号ConditionalAttribute被定义为。

好的。很清楚。所以调用该方法不会被编译。但副作用又如何呢?

[Conditional("UndefinedCondition")]
static void f1(int x) { Console.WriteLine(x); }

static int a = 0;
static void f2() { f1(++a); }

So when f2被调用,调用f1应该被删除。但为什么是++a也删除了?这对我来说没有任何意义!


扩展马克的答案。

这绝对是“按设计”。理解其合理性的最好方法是思考这段代码取代了什么。此功能以许多且更简洁的方式采用了条件编译代码的方式。

例如,

#if DEBUG
f1(++a);
#endif

或者其他版本

#define f1(x) ...

在非调试情况下显然没有副作用。这与[条件]代码的行为相同。我同意它肯定不如第一个例子那么清楚,但它和第二个例子一样清楚。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么.NET的条件属性会导致副作用被消除? 的相关文章

  • 生成 .tail IL 指令的简单 F# 代码是什么?

    我想看看 tailIL 指令 但我一直在编写的使用尾部调用的简单递归函数显然已优化为循环 我实际上是在猜测这一点 因为我不完全确定反射器中的循环是什么样的 我绝对没有看到任何 tail不过操作码 我在项目的属性中检查了 生成尾部调用 我还尝
  • 我应该如何在 VB.NET 中进行转换?

    所有这些都相等吗 在什么情况下我应该选择其中一个而不是其他 var ToString CStr 变量 CType 变量 字符串 DirectCast 变量 字符串 编辑 来自的建议不是我自己 https stackoverflow com
  • C# 7 表达式主体构造函数

    在 C 7 中 如何使用 2 个参数编写这样的表达式主体构造函数 public Person string name int age Name name Age age 一种方法是使用元组和解构来允许在一个表达式中进行多次赋值 public
  • 强制 Mpeg2 解复用器使用 ffdshow 渲染 H 264 数字电视视频

    不幸的是 我花了很多时间尝试使 DirectShow 的 DTVViewer 示例正常工作 但没有成功 DVBT网络的视频格式是H264 我发现IntelliConnect行为IFilterGraph更喜欢使用 Mpeg2 视频格式 对于那
  • .NET 中严格浮点数学的库

    我有 Java 算法 计算及其单元测试 单元测试期望结果具有一定的精度 增量 现在我将算法移植到 NET 中 并希望使用相同的单元测试 我使用双数据类型 问题在于 Java 使用 strictfp 64 位 来执行 Math 类中的某些操作
  • 当用户打开文件时如何锁定对文件的访问?

    我正在编写一个 C NET 程序 该程序使用 XmlSerializer 对当前用户正在处理的项目与 XML 文件进行序列化和反序列化 这工作正常 但我试图找到一种方法来防止两个用户从网络驱动器打开同一个文件并让一个用户覆盖前一个用户的保存
  • ASP.NET MVC ActionFilterAttribute 在模型绑定之前注入值

    我想创建一个自定义操作过滤器属性 该属性在模型绑定期间可访问的 HttpContext 项中添加一个值 我尝试将其添加到 OnActionExecuting 中 但似乎模型绑定是在过滤器之前执行的 你知道我该怎么做吗 也许模型绑定器中有一个
  • C#:询问用户密码,然后将其存储在 SecureString 中

    在我目前为客户开发的小型应用程序中 我需要询问用户他的 Windows 登录用户名 密码和域 然后使用这些信息系统 诊断 进程 启动启动一个应用程序 我有一个带有 UseSystemPasswordChar 的文本框来屏蔽输入的密码 我需要
  • 如何获取可用系统内存的大小?

    C NET 中是否可以获取系统可用内存的大小 如果是的话怎么办 Use Microsoft VisualBasic Devices ComputerInfo TotalPhysicalMemory http msdn microsoft c
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 忽略正则表达式匹配的空格

    我需要匹配 8 个或更多数字 其序列可以包含空格 例如 以下所有内容都是有效匹配 12345678 1 2345678 12 3 45678 1234 5678 12 34567 8 1 2 3 4 5 6 7 8 此刻我有 d 8 但这只
  • 什么是 .NET 程序集?

    什么是 NET 程序集 我浏览了网络 但无法理解其定义 程序集是 net 应用程序的最小部署单元 它可以是一个dll or an exe 它主要有两种类型 私人集会 dll 或 exe 是一个应用程序的专有财产 一般存放在应用程序根文件夹中
  • IIS / .Net 只允许对给定用户会话进行单个并发响应

    这是我的问题 我们有一个 Net 4 5 Web 表单应用程序 由于服务器端的大量数据访问和操作 应用程序中的某些页面需要很长时间才能加载 如果用户在页面完成加载之前关闭浏览器选项卡 然后打开新选项卡 则新选项卡中对应用程序的任何请求都将挂
  • 避免使用一本字典的更好代码 - 区分大小写问题

    我有以下方法用数据读取器的值填充字典 数据读取器字段和传递给方法的属性之间可能存在大小写不匹配的情况 在下面的方法中 我首先将属性转换为小写以解决此问题 这会导致两个字典 有没有更好的方法用一本字典来实现这一目标 private Dicti
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • 检测到 ASP.NET 网页版本冲突:指定版本为“1.0.0.0”,但 ASP.MET MVC 3 中 bin 中的版本为“2.0.0.0”

    安装 microsoft web helper 后出现以下错误 检测到 ASP NET 网页版本冲突 指定版本为 1 0 0 0 但 bin 中的版本为 2 0 0 0 要继续 请从应用程序的 bin 目录中删除文件或删除 web conf
  • 如何检查日期时间是否发生在今天?

    有没有比下面的代码更好的 net 方法来检查 今天 是否发生了 DateTime if newsStory WhenAdded Day DateTime Now Day newsStory WhenAdded Month DateTime

随机推荐

  • Task.Result 与 .GetAwaiter.GetResult() 相同吗?

    我最近正在阅读一些使用大量异步方法的代码 但有时需要同步执行它们 该代码的作用是 Foo foo GetFooAsync GetAwaiter GetResult 这是否与 Foo foo GetFooAsync Result Task G
  • 通过 ADB 更改设备语言

    我想通过 ADB 更改语言 我尝试 adb shell setprop persist sys language fr setprop persist sys country CA stop sleep 5 start 但我收到错误 set
  • 如何在 Node js 中使用 module.exports 导出数组?

    我有一个使用node js 的项目 这是我第一次使用nodejs 我想将数组导出到我的应用程序 这是一些代码 module exports var arrays arrays 0 array 0 arrays 1 array 1 array
  • 为什么 easeljs stage.getBounds() 返回 null?

    在这个例子中 var canvas document getElementById testCanvas var stage new createjs Stage canvas function drawRectangle var rect
  • 当我们在键盘上键入时,如何使字符串的内容显示在屏幕上?

    我有这个功能 玩家可以输入他的名字 但我希望每个字母在他输入时出现在屏幕上 这是我的功能 def input player name player name screen True name win blit player name bg
  • Spring Security,安全访问和非安全访问

    我正在做一个需要先登录的小应用程序 但对于某些第三方工具 我想提供一个不需要登录的API 登录本身工作正常 API 本身工作正常 但我不知道如何告诉 Spring Security 无需身份验证即可访问 API 我在这里和其他网站上检查了几
  • Spring mvc 验证异常处理程序在控制器方法之前调用

    我有以下代码 public class StudentController extends BaseController RequestMapping value student edit method RequestMethod POST
  • Flask-Sqlalchemy:数据库查询不返回新数据

    我正在构建一个应用程序 它从一项服务接收 webhook 将数据存储在数据库中 然后通过 API 提供数据 我能够成功地将数据添加到我的应用程序中 但是当我查询数据库时 我只收到上次启动应用程序时数据库中的第一次提交 例如 如果我启动应用程
  • Android:ListView 中的按钮未接收 onClick 事件

    我正在制作一个日期选择器活动 看起来像滚动的 30 天月份 日历 想想 Outlook 日历 日期选择器包含 MonthView 视图的 ListView 用于滚动 每个视图都是各个日期的 TableView MonthView 中的每一天
  • FPGA 有哪些实际应用?

    我对我的程序为一个小型七段显示器提供动力感到非常兴奋 但是当我向不在现场的人展示它时 他们总是说 那么你能用它做什么 我永远无法给他们一个简洁的答案 谁能帮我吗 第一 它们不需要具有易失性存储器 事实上 大厂商 Xilinx Altera
  • 如何从输出迭代器获取值类型?

    假设我有一个 C 容器 例如 MyContainer 包含的对象存储为void 指针 迭代此容器元素的唯一方法是通过两个接口函数 getFirstElem MyContainer const void 输出容器的第一个元素 getNextE
  • 为什么组件中的 React Native 函数没有“function”关键字?

    在 javascript 函数中声明为function myFuncName 但 React React Native 函数省略了该关键字 这是 ES6 JSX 或 React 特有的吗 这是ES6的一个特性 更多信息请访问https ba
  • C#/ODP.NET:大 IN 子句解决方法

    我们有一个 C 组件 可以处理将任意大小的元素列表附加到半任意 SQL 的 IN 子句中SELECT查询 本质上这可以归结为接收类似的东西 SELECT COUNT FROM a WHERE b IN 其中 是允许组件修改的查询的唯一部分
  • Python - 将日期戳添加到文本文件

    在Python v2中 有没有办法获取日期 时间戳并将其放入创建新的文本文件中 IE 当我想创建一个新的文本文件并将程序的内容写入其中时 它将创建一个包含时间 日期的新文本文件 谢谢你的帮助 import datetime def time
  • Google API oauth httpd 服务器与 Python 中的 SABNzbd+ 冲突

    我正在编写一个与 Google API 交互的 Python 应用程序 并需要通过 oauth2 进行用户身份验证 我目前正在设置一个本地身份验证服务器 以接收从 Google 的 oauth 服务器返回的 oauth2 身份验证代码 基本
  • 在 IE8 中可单击带警报的禁用按钮(Asp.net 网站中的浏览器兼容性问题)

    我已经禁用了链接按钮和图像按钮 位于链接按钮内 以便我可以显示警报 并且它在 Chrome 中工作正常 但是当我在 IE8 中打开它时 图像被禁用 但是当我单击它时 它会显示popup 您确定要删除该用户吗 为什么我在 IE8 和 IE7
  • ClassNotFoundException:使用服务组合时未找到 com.mysql.jdbc.Driver

    我正在使用 servicemix 4 4 1 和 maven 3 0 4 我对 servicemix java 世界非常陌生 我的主要知识是 c php 我已将以下内容添加到我的路线之一
  • 恢复后在 Android 中丢失 OpenGL 纹理

    我的游戏运行正常 除非我按下 HOME 按钮然后继续 需要做什么才能再次使用纹理 我尝试在 GLSurfaceView 上调用 onPause 和 onResume 当调用活动的 onPause 和 onResume 时 有什么想法我可能做
  • WCF MSMQ 单元测试

    我使用 WCF 创建了一个自定义 msmq 服务 它使用自定义绑定 因为它需要在通道层执行一些自定义逻辑 在通道层调用另一个 wcf 服务 该服务将成为未来几年我们系统的核心功能 我想尽我所能确保服务稳健 但是 我不知道从哪里开始 即测试响
  • 为什么.NET的条件属性会导致副作用被消除?

    我读到了关于Conditional今天的属性 根据 MSDN 正在申请ConditionalAttribute方法的调用指示编译器不应将对该方法的调用编译为 Microsoft 中间语言 MSIL 除非与关联的条件编译符号Condition