将equals而不是equals传递给函数

时间:2013-05-17 12:48:39

标签: c#

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

if(x == y)

和B有这个

if(x != y)

其中x和y是整数。

我想减少代码的复制,因此希望将此代码放在单独的方法中。问题是如何将==!=运算符传递给这样的方法并执行它?

4 个答案:

答案 0 :(得分:14)

喜欢和布尔一样吗?

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

如果是整数方程和不等式,它可以很容易地解决你的问题。

答案 1 :(得分:4)

您可以传递Func<int, int, bool>

private void MyMethod(Func<int, int, bool> checker)
{
    if(checker(3, 4))
    {
         // Do Something.
    }
}

答案 2 :(得分:1)

也许这样做:

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

  if (criterion(x, y))

  ...
}

然后使用TheMethod((x, y) => x == y);TheMethod((x, y) => x != y);进行通话。

答案 3 :(得分:1)

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

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

名称Eval可以使用一些工作,但这样你就可以从外面传递旗帜了。用它来确定哪个评估返回true。