【问题标题】:How to correct the rule 'Operator overloads have named alternates' in c#如何在c#中更正规则“运算符重载已命名替代”
【发布时间】:2012-11-04 04:50:27
【问题描述】:

由于运算符重载(运算符>和运算符Operator overloads have named alternates,运算符>和

例如,我有:

public static bool operator >(XXX lhs, XXX rhs)

public static bool operator <(XXX lhs, XXX rhs)

如何提供一种比较方法,使其与大于和小于运算符的行为相同?

编辑:

int Compare() 只返回正数(大于)、负数(小于)和 0(等于),那么在我的重载运算符中有一个 >= 运算符呢,这意味着我的比较方法应该处理(大于或等于) sinario 以及

那么有 >、= 和

【问题讨论】:

标签: c# sonarqube


【解决方案1】:
public static int Compare(XXX lhs, XXX rhs);

返回值:

  • 小于零
    lhs 小于rhs

  • lhs 等于 rhs
  • 大于零
    lhs大于rhs

例子:

用法:

// operator            // named alternative
   x < y                  Compare(x, y) < 0
   x <= y                 Compare(x, y) <= 0
   x > y                  Compare(x, y) > 0
   x >= y                 Compare(x, y) >= 0

实现IComparable<T>也是个好主意。

【讨论】:

  • 感谢您的评论,重载的运算符中还有>=和
  • 对不起,我不明白你的问题。你能用不同的词说吗?
  • 当然,我的意思是 int Compare() 只返回正数(大于)、负数(小于)和 0(等于),那么在我的重载运算符中有一个 >= 运算符呢?意味着我的 Compare 方法也应该处理(大于或等于)sinario。
  • 我添加了 Compare 方法的使用示例。
【解决方案2】:

你有一个 Compare 方法,返回值决定两个操作数是否相等 (0),或者 x 是否小于 y,或者 x 是否大于 y。

例如,查看String.Compare 方法。

【讨论】:

  • String.Compare 可能不是一个很好的例子,因为 String 没有 运算符。但是方法签名是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多