问题标签 [conditional-attribute]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 与 #if/#endif 相比,条件属性的缺点是什么?
我的代码库有很多#if DEBUG/#endif
语句,它们大多具有断言类型逻辑,我没有足够的勇气在生产中运行。
我会后悔把所有这些都换成新的做事方式吗?
更新:我正在寻找两种相似但不同的语法风格的特征之间的差异来进行断言。我知道还有很多其他方法可以演示应用程序的工作,我也这样做了。我还没准备好完全放弃断言。
我还更新了实际调试发布场景的方法名称。
c# - 接口成员上的 C# 条件属性
我试图通过使用 Conditional 属性来摆脱代码中的“#if TRACE”指令,但不能轻松地将这种方法应用于接口。我有办法解决这个问题,但它非常难看,我正在寻找更好的解决方案。
例如,我有一个带有条件编译方法的接口。
我不能在接口中使用条件属性:
我可以让接口方法只调用具体类中的条件私有方法:
这将使我的客户端代码在非 TRACE 构建中对“nop”TraceOnlyDoIt() 方法进行冗余调用。我可以通过接口上的条件扩展方法来解决这个问题,但它变得有点难看。
有一个更好的方法吗?
c# - 是否可以使用条件属性来创建类似的调试器和运行时方法?
是否可以创建 2 个具有相同方法名称、传入值并使用条件属性和一些反条件返回的方法,例如
这样您就可以调用一个方法并根据是否定义了“调试”,编译器将选择哪种方法?
谢谢
c# - 使用反射在运行时获取 ConditionalAttribute 的值
我正在研究一个涉及检索给定类型的方法的库。我一直在使用Type.GetMethods
,但我注意到了一个问题。假设给定类型中的方法使用 a ConditionalAttribute
,并且此条件的值为 false。GetMethods 仍将包含此方法,但我想忽略它。
这是我正在尝试的一个简单示例。这个程序在调试模式下运行,所以我想找到一种方法,只调用 foo() 和 fooDebug() 而忽略 fooBar()。
最终,我想知道哪些方法不包含错误的 ConditionalAttributes。
编辑
这个想法适用于其他人会使用的库,因此假设 ClassA 是他们定义并传递到我的库中的类型。
c# - 使用 ConditionString 获取特定属性实例
这可能是一个愚蠢的问题。我试图理解条件属性的概念。我的目标是获取一个特定的属性实例并最终得到 NullReferenceException 而不是输出“CONDITION1”。
我希望我在 GetCustomAttribute 中使用正确的属性。有人可以指出错误在哪里吗?
提前致谢。
c# - 为什么我不能在类上使用 ConditionalAttribute?
我查看ConditionalAttribute
声明,它是这样声明的:
我发现 JavaScript 代码是这样的:
并AttributeTargets.Class
声称意味着属性可以应用于一个类。所以我尝试了这个:
但编译器发出以下错误
错误 CS1689:属性“System.Diagnostics.ConditionalAttribute”仅对方法或属性类有效
和 MSDN 说
此错误仅发生在 ConditionalAttribute 属性中。如消息所述,此属性只能用于方法或属性类。例如,尝试将此属性应用于类将生成此错误。
所以看起来有一个属性被声明为适用于一个类,但试图将它应用到一个类会导致编译错误。
这怎么可能?这是一些硬连线的特殊情况还是什么?
c# - 使用 ConditionalAttribute 是否也会删除参数计算?
我尝试了以下代码:
并且看起来在 Release 构建中没有抛出异常,因此不仅删除了对标记为的方法的调用ConditionalAttribute
,而且还消除了参数计算。
这种行为有保证吗?
c# - 为什么我不能将 Debug.Assert() 与接受动态并返回 bool 的方法一起使用?
这是我的代码:
当我运行它时,我收到RuntimeBinderException
以下消息:
无法动态调用方法“断言”,因为它具有条件属性
是的,Assert()
有ConditionalAttribute
它。然而,无论该方法接受什么,只有一种whatever()
方法会返回。bool
运行时到底抱怨什么?为什么它不能使用bool
并将其传递给Assert()
?
f# - 如何结合需要单位结果的 ConditionalAttribute 来利用 TextWriterFormat 的 printfn 样式的功能
我将自己设置为创建一个行为类似于sprintf
or的跟踪函数printfn
,但使用ConditionalAttribute
.
到目前为止的结果:我认为这是不可能的。
问题集中在这样一个事实,即当您使用Conditional("DEBUG")
属性时,函数必须返回单位结果。“正常”参数按应有的方式工作,并且该方法已正确修饰(编辑:修饰,是的,但可咖喱成员没有被删除,请参阅讨论,必须改用元组形式):
(请注意,没有ignore
,由于 Conditional 属性,这将无法编译)
但是,一旦我尝试了 的任何变体Printf.TextWriterFormat<'T>
,它就会失败,而且我看不到解决方法:
这在没有属性的情况下有效,但使用属性,它将引发:
这个表达式应该有类型
unit
,但这里有类型
string -> unit
该错误特别强调Trace.trace "hello: %s"
。所以看起来编译器没有识别出整个表达式导致 a unit
,并引发错误,因为它在内部创建了一个返回的包装函数string -> unit
,这是ConditionalAttribute
.
当我尝试通过显式指定:unit
函数返回类型或printfn msg |> ignore
作为主体来修复它时,我失去了使用类型安全的文本编写器格式字符串的能力,事实上,它不会识别调用中的第二个参数- 网站不再。
因此,虽然整个函数签名都遵循 CLR 的规则,但 F# 创建的内联函数似乎没有,至少在这种特定情况下没有。
我尝试过变体,包括kprintf
,sprintf
看看是否有帮助,但都无济于事。
有任何想法吗?或者这是您尝试铺设地毯的情况之一,一旦您将它在一个角落正确平滑,它会在另一个角落冒泡,反之亦然,即它永远不适合?
PS:如果您想知道我为什么想要它:只是尝试创建一个行为类似于现有 Trace 的便利函数,但在后台运行一些其他功能。我目前拥有的作品,但它只需要一个字符串,而不是静态类型检查的参数,所以它迫使用户编写如下内容:
spring - 有没有办法有条件地在自定义 JSP 标记中包含属性?
假设我有一个可以包含 3 个属性的字段
假设我只想在变量不为空时包含那些 a,b,c 属性。所以有了 EL 它就变成了这样
如果一个或多个变量为空(例如 varB 为空),我将得到如下输出:
所以 b 仍然存在,但传递了一个空白值。如果属性为空白,这可能会导致某些弹簧<form:etc>
标签出现问题(例如 form:options 上的 itemLabel)如果我不想要这样怎么办?有没有一种简单的方法可以让属性完全不显示?
我知道我能做到
但这意味着我们需要一个巨大的决策树,因为如果每个属性都可能是空白的,那么属性的数量就会增加。
有谁知道更好的方法来做到这一点?