【发布时间】:2018-09-17 03:01:43
【问题描述】:
在我的程序中,我有两个属性:VisibleToA 和 VisibleToB。这些用于通过 API 限制某些函数的可见性。
当我需要让A 或B 可见的功能时,就会出现问题。默认情况下,属性是“与”在一起的,因此我创建了一个方法:
[VisibleToA(), VisibleToB()]
public void ConditionallyVisibleMethod() { }
它实际上等同于VisibleToAandB。这是一个问题,因为如果它们都为真,那么A 就无法看到它,因为A 不是B,并且使得B 无法看到它,因为B不是A。
因此,我想让它对A 或B 可见,只需要满足一个条件即可查看。
所以,简单的修复,我创建了一个OrConditionAttribute,它接收Attributes 的数组。循环遍历每个条件,如果为真,则返回真。然后我发现属性只能有原始类型的参数,因为它们是如何写入元数据的。
由于程序的结构如何工作,它们必须是属性,所以我需要以一种或另一种方式使用一种。我考虑过传入代表属性的类名的strings,然后在OrConditionAttribute 中从string 名称创建一个类的实例,但我不知道如何传入参数,因为@987654341 @ 和 VisibleToB 都需要参数。
有没有办法实现这个功能?
【问题讨论】:
-
您的问题有点难以回答,因为有一些关于您的限制的重要细节无法解释,特别是您所说的“由于程序的结构如何工作”是什么意思。您是否使用其他人编写的属性类?还是您正在设计自己的系统?这将有助于找到答案。
-
如果这些是您的属性,那么肯定取决于您如何处理它们,因此如果您希望它们 ORed,那么您应该如何处理它们。也许我忽略了一些东西。
-
我的程序正在使用依赖于属性的 API。每个类和函数(甚至一些参数)都使用它们,我必须用所述属性标记我的代码,以便它们可以与 API 通信。我同意这有点奇怪,但一旦你习惯了它就会有意义。
-
这个 API 是公开的吗?链接到它可能会有所帮助,以便我们为您找到答案。
-
是的,这是我试图扩展的属性以使
OrConditiondiscord.foxbot.me/stable/api/… 我的两个属性属于不同的组。
标签: c# attributes conditional-statements