比较 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)
我将开发一个会员系统,该系统将具有 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)