我读到了关于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(使用前将#替换为@)