比较 2 个对象,就好像它们具有数值一样

Comparing 2 objects as if they have numerical values

我将开发一个会员系统,该系统将具有 7 级以上的用户角色以及许多其他用户功能。比如对一个城市有3级权限,对另一个城市有5级权限。

是否可以比较 2 个对象,就好像它们具有数值一样?例如将用户的角色与某个级别的角色进行比较。

if (objUser.role >= userRole.userLevel3){
    //do something
}

许可规则比我简单解释的要复杂得多。因此,将用户的角色与最低负担能力进行比较是我的目标。我是该项目的首席开发人员,我的工作是为经验不足的开发人员提供易于使用的会员系统。

请将此问题视为大声思考,我愿意 ideas/discussions。

您可以将自定义比较运算符编写为 >=Overloadable Operators in C#

请注意,对于常规意义上不严格 "numeric" 的类型,采用这条路线很少是个好主意。

对于权限系统,最好有常规功能或明确说明是否允许某些内容的扩展。由于比较顺序错误,可能很难发现错误 - 编写一些您认为看起来正确的代码,并请其他成员向您解释代码的含义,以查看 >= 比较在该领域是否有意义。

C# 允许您重载比较运算符,所以这绝对是可能的。您可以重载运算符对 <>=(它们必须成对重载),如下所示:

class AccessLevel {
    ...
    public static bool operator <=(AccessLevel x, AccessLevel y) {
        ...
    }
    public static bool operator >(AccessLevel x, AccessLevel y) {
        ...
    }
}

如果您使用枚举

 enum Roles {Role1 = 0, Role2 = 1, Role3 = 2}
 enum UserLevel { Level1 = 0..... Level 10 = 11}

您始终可以转换为 uint 并执行以下操作:

  (uint)(object.role) > (uint)(object2.UserLevel)