C# if中有多个相似的或条件怎么简写?

时间:2023-01-04 22:19:37
||" target="_blank">|| 写程序中遇到一个问题,我写了一个if 判断语句
if((b[1].x+30 >= a[n].x && b[1].x  <= a[n].x + 60 ) || (b[2].x  + 30 >= a[n].x && b[2].x  <= a[n].x + 60 )|| (b[3].x  + 30 >= a[n].x && b[3].x  <= a[n].x + 60 ))
|| 前后的语句(** && **)是类似的,可能需要继续增加到b[n],请问有没有大神能告诉我如何简写?

8 个解决方案

#1


我再写的清楚点:
if((b[1].x+30 >= a[n].x && b[1].x  <= a[n].x + 60 )||
   (b[2].x+30 >= a[n].x && b[2].x  <= a[n].x + 60 )||
   (b[3].x+30 >= a[n].x && b[3].x  <= a[n].x + 60 )||


     (b[i].x+30 >= a[n].x && b[i].x  <= a[n].x + 60 ))
这个如何简写?

#2


你要实现的算法是什么?如果只是1-n的问题可以采用for循环或foreach循环  嵌套if判断。如果全是 and链接还可以反过来判断,只要一个不满足就false

#3


if (b.Any(x => x.x + 30 >a[n].x && x.x <= a[n].x + 60))
...

#4



public static bool getBool(int x,int y)
{
    if (x - y > -30 && x - y <= 60) return true;
    else return false;

}

if(getBool(b[1].x,a[n].x)||getBool(b[2].x,a[n].x)||getBool(b[3].x,a[n].x))

#5


其实,a[n].x是共有的,你可以进一步简化getBool方法,使得只传递一个参数(b[1],b[2]……)就行了,使得写法更方便

#6


更正:if (x - y > = -30 && x - y <= 60) 

#7


if (b.Any(bi => bi.x + 30 >= a[n].x  && bi.x  <= a[n].x + 60 ))
{//看你n是固定值
//判断成功
}

#8


非常感谢楼上大神的回答,问题已经解决了 C# if中有多个相似的或条件怎么简写?

#1


我再写的清楚点:
if((b[1].x+30 >= a[n].x && b[1].x  <= a[n].x + 60 )||
   (b[2].x+30 >= a[n].x && b[2].x  <= a[n].x + 60 )||
   (b[3].x+30 >= a[n].x && b[3].x  <= a[n].x + 60 )||


     (b[i].x+30 >= a[n].x && b[i].x  <= a[n].x + 60 ))
这个如何简写?

#2


你要实现的算法是什么?如果只是1-n的问题可以采用for循环或foreach循环  嵌套if判断。如果全是 and链接还可以反过来判断,只要一个不满足就false

#3


if (b.Any(x => x.x + 30 >a[n].x && x.x <= a[n].x + 60))
...

#4



public static bool getBool(int x,int y)
{
    if (x - y > -30 && x - y <= 60) return true;
    else return false;

}

if(getBool(b[1].x,a[n].x)||getBool(b[2].x,a[n].x)||getBool(b[3].x,a[n].x))

#5


其实,a[n].x是共有的,你可以进一步简化getBool方法,使得只传递一个参数(b[1],b[2]……)就行了,使得写法更方便

#6


更正:if (x - y > = -30 && x - y <= 60) 

#7


if (b.Any(bi => bi.x + 30 >= a[n].x  && bi.x  <= a[n].x + 60 ))
{//看你n是固定值
//判断成功
}

#8


非常感谢楼上大神的回答,问题已经解决了 C# if中有多个相似的或条件怎么简写?