2013-05-17 23 views
3

我有代码A和B的两个部分是彼此相同的,所不同的是A具有此传等于和不等于成一个函数

if(x == y) 

和B具有此

if(x != y) 

其中x和y是整数。

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

+0

您应该至少在“部分”中显示您正在进行的操作的简化版本。否则,听起来好像你不知道如何将一个'bool'变量传递给一个方法。 –

回答

4

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

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

喜欢xor it with a bool?

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

在整数方程和不公平的情况下,它可以很容易地解决你的问题。

+3

精彩的回答。有时,现代语言让我以复杂的方式思考(传递一个动作),忘记考虑最简单的解决方案! –

+0

@Matzi xoring结果与布尔是一个好主意 – Chris

+0

它不容易读/写/知道它的工作一目了然,虽然恕我直言...也许它会更好的静态方法? –

1

也许这样做:

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

    if (criterion(x, y)) 

    ... 
} 

然后用TheMethod((x, y) => x == y);TheMethod((x, y) => x != y);打电话。

1

您想使用acceps一个标志,用于评估平等或不平等的布尔函数:

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

名称评估和演示可以使用一些工作,但这样一来,你从外面&传递标志用它来确定哪个评估返回true。