如何纠正规则'运算符重载已在c#中命名替换'

时间:2012-11-15 14:54:09

标签: c# sonarqube

当运算符重载(运算符>和运算符<)违反规则Operator overloads have named alternates时,运算符>和<但是,需要另一种方法比较,因为只有一种比较方法,该方法的签名应该是什么?

例如,我有:

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

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

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

编辑:

int Compare()只返回正(大于),负(小于)和0(相等),在我的重载运算符中有一个&gt; =运算符,这意味着我的Compare方法应该处理(也大于或等于sinario

有&gt;,&lt; &gt; =和&lt; =四个重载运算符?

2 个答案:

答案 0 :(得分:4)

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>也是一个好主意。

答案 1 :(得分:1)

您有一个比较方法,返回值确定2个操作数是否相等(0),或者x是否小于y,或者x是否大于y。

例如,查看String.Compare方法。