我将开发一个会员系统,该系统具有7个级别的用户角色以及许多其他用户功能。例如,拥有城市的第3级权限,并拥有另一个城市的第5级权限。
是否可以比较2个对象,就好像它们有数值一样?例如,将用户角色与特定级别角色进行比较。
if (objUser.role >= userRole.userLevel3){
//do something
}
许可规则比我简要解释的复杂。所以比较用户'尽可能少的角色是我的目标。我是该项目的首席开发人员,我的工作是为经验不足的开发人员提供易于使用的会员系统。
请将此问题视为大声思考,我愿意接受想法/讨论。
答案 0 :(得分:3)
C#允许你重载比较运算符,所以这绝对是可能的。你可以重载一对运算符<
和>=
(它们必须成对重载),如下所示:
class AccessLevel {
...
public static bool operator <=(AccessLevel x, AccessLevel y) {
...
}
public static bool operator >(AccessLevel x, AccessLevel y) {
...
}
}
答案 1 :(得分:2)
您可以将自定义比较运算符编写为>=
,类似Overloadable Operators in C#。
请注意,对于常规意义上并非严格“数字”的类型,这条路线很少是个好主意。
对于权限系统,最好有常规功能或可能明确说明是否允许某些内容的扩展。由于错误的比较顺序可能很难发现错误 - 编写一些您认为看起来正确的代码并要求其他成员向您解释什么代码意味着看看>=
比较在该域中是否有意义。
答案 2 :(得分:0)
如果您使用的是枚举
enum Roles {Role1 = 0, Role2 = 1, Role3 = 2}
enum UserLevel { Level1 = 0..... Level 10 = 11}
你总是可以转换为uint并执行:
(uint)(object.role) > (uint)(object2.UserLevel)