需要重载operator <和null检查

Luk*_*kas 14 c# operator-overloading

我在c#中重载了lessthan-operator,我想知道这是否需要检查null.您可以在下面找到一个示例:

public static bool operator <(MyClass x, MyClass y)
{
  if (x == null && y == null)
  {
    return false;
  }
  if (x == null)
  {
    return true; //false?
  }
  if (y == null)
  {
    return false; //true?
  }
  return x.Value < y.Value;
}
Run Code Online (Sandbox Code Playgroud)

或者这是正确的:

public static bool operator <(MyClass x, MyClass y)
{
  return x.Value < y.Value;
}
Run Code Online (Sandbox Code Playgroud)

我没有找到任何关于此的指示.但也许我错过了什么.

das*_*ght 12

答案取决于您的预期使用模式.如果您打算在混合中使用空值,并且您希望将null值视为小于非空值,那么您的实现是正确的; 如果您希望将null值视为大于非null对象,则应使用已注释掉的返回值(falsetrue).如果您不打算在混合中允许空值,则抛出ArgumentNullException或允许NullReferenceException将是正确的选择.

  • 抛出“ ArgumentNullException”孩子,切勿抛出故意的“ NullReferenceException”。 (2认同)

Chr*_*isF 5

两种方法都是正确的(对于不同的正确值)。

如果xy可能为空并且在您的情况下具有有效含义,则采用第一种方法。

如果xy极不可能为 null,则选择第二个并让任何异常传播到调用代码进行处理。