我有代碼A和B的兩個部分是彼此相同的,所不同的是A具有此傳等於和不等於成一個函數
if(x == y)
和B具有此
if(x != y)
其中x和y是整數。
我想減少代碼的複製,所以想把這個代碼放在一個單獨的方法中。問題是如何將==
和!=
運算符轉換爲這種方法並執行它?
我有代碼A和B的兩個部分是彼此相同的,所不同的是A具有此傳等於和不等於成一個函數
if(x == y)
和B具有此
if(x != y)
其中x和y是整數。
我想減少代碼的複製,所以想把這個代碼放在一個單獨的方法中。問題是如何將==
和!=
運算符轉換爲這種方法並執行它?
您可以通過一個Func<int, int, bool>
private void MyMethod(Func<int, int, bool> checker)
{
if(checker(3, 4))
{
// Do Something.
}
}
喜歡xor it with a bool?
bool negate = true;
...
if ((x == y)^negate)
...
在整數方程和不公平的情況下,它可以很容易地解決你的問題。
精彩的回答。有時,現代語言讓我以複雜的方式思考(傳遞一個動作),忘記考慮最簡單的解決方案! –
@Matzi xoring結果與布爾是一個好主意 – Chris
它不容易讀/寫/知道它的工作一目瞭然,雖然恕我直言...也許它會更好的靜態方法? –
也許這樣做:
void TheMethod(Func<int, int, bool> criterion)
{
...
if (criterion(x, y))
...
}
然後用TheMethod((x, y) => x == y);
或TheMethod((x, y) => x != y);
打電話。
您想使用acceps一個標誌,用於評估平等或不平等的布爾函數:
bool Eval(bool enforceEquality, T x, T y)
{
if(enforceEqality)
return x == y
else
return x != y
}
名稱評估和演示可以使用一些工作,但這樣一來,你從外面&傳遞標誌用它來確定哪個評估返回true。
您應該至少在「部分」中顯示您正在進行的操作的簡化版本。否則,聽起來好像你不知道如何將一個'bool'變量傳遞給一個方法。 –