Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将等于和不等于传递到函数中_C# - Fatal编程技术网

C# 将等于和不等于传递到函数中

C# 将等于和不等于传递到函数中,c#,C#,我有两段代码A和B,它们彼此相同,只是A有这个 if(x == y) B有这个 if(x != y) 其中x和y是整数 我希望减少代码的复制,因此希望将此代码放在一个单独的方法中。问题是如何传递==和=运算符编码到这样一个方法中并执行它?就像用布尔值对其进行异或一样 bool negate = true; ... if ((x == y) ^ negate) ... 在整数方程和不等式的情况下,它可以很容易地解决您的问题。您可以传递一个Func private void MyMetho

我有两段代码A和B,它们彼此相同,只是A有这个

if(x == y)
B有这个

if(x != y)
其中x和y是整数


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

就像用布尔值对其进行异或一样

bool negate = true;
...
if ((x == y) ^ negate)
  ...
在整数方程和不等式的情况下,它可以很容易地解决您的问题。

您可以传递一个
Func

private void MyMethod(函数检查器)
{
如果(检查人(3、4))
{
//做点什么。
}
}
可能会这样做:

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

  if (criterion(x, y))

  ...
}
void方法(Func标准)
{
...
if(标准(x,y))
...
}

然后使用
TheMethod((x,y)=>x==y)调用
方法((x,y)=>x!=y)

您希望使用一个接受用于计算相等或不相等的标志的布尔函数:

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

名称Eval可能需要一些工作,但这样您就可以从外部传入该标志,并使用它来确定哪个评估返回true。

非常好的答案。有时,现代语言让我以如此复杂的方式思考(传递动作),以至于我忘记了思考最简单的解决方案@Matzi用布尔函数对结果进行XOR运算是一个很好的想法,它不容易读/写/一眼就知道它是有效的,尽管我认为…作为一个静态方法可能会更好?你至少应该在“部分”中展示你正在做的事情的简化版本。否则,听起来好像您不知道如何将
bool
变量传递给方法。
bool Eval(bool enforceEquality, T x, T y)
{
   if(enforceEqality)
      return x == y
   else 
      return x != y
}