3

我有两段代码 A 和 B 彼此相同,除了 A 有这个

if(x == y)

B有这个

if(x != y)

其中 x 和 y 是整数。

我想减少代码的复制,所以想把这段代码放在一个单独的方法中。问题是如何将==and!=运算符传递给这样的方法并执行它?

4

4 回答 4

14

喜欢用布尔异或吗?

bool negate = true;
...
if ((x == y) ^ negate)
  ...

在整数方程和不等式的情况下,它可以轻松解决您的问题。

于 2013-05-17T12:50:18.077 回答
4

你可以通过一个Func<int, int, bool>

private void MyMethod(Func<int, int, bool> checker)
{
    if(checker(3, 4))
    {
         // Do Something.
    }
}
于 2013-05-17T12:52:03.287 回答
1

也许这样做:

void TheMethod(Func<int, int, bool> criterion)
{
  ...

  if (criterion(x, y))

  ...
}

然后用TheMethod((x, y) => x == y);or调用TheMethod((x, y) => x != y);

于 2013-05-17T12:53:37.243 回答
1

您想使用一个布尔函数来接受一个标志来评估相等或不等:

bool Eval(bool enforceEquality, T x, T y)
{
   if(enforceEqality)
      return x == y
   else 
      return x != y
}

名称 Eval 可以使用一些工作,但是通过这种方式,您可以从外部传入标志并使用它来确定哪个评估返回 true。

于 2013-05-17T12:53:44.883 回答