2013-05-17 61 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。