比较if中的两个值

时间:2013-12-20 11:38:05

标签: c# if-statement comparison

假设我有这样的话:

if(condition1 != asd && menu != menu1 && menu != menu2)

这可以简化为:

if(condition1 != asd && menu != (menu1 && menu2))

我尝试将括号放在第二个条件周围,或者围绕它不应该的两个条件,并围绕整个事情,但它不会通过编译器。

这样可以缩短第二种情况吗?或者有更好的方法吗?

PS 即可。我不知道该怎么称呼它,所以随时编辑标题。

7 个答案:

答案 0 :(得分:5)

想象一下,如果你要比较数字:

if (myNumber != 5 && myNumber != 10)

您可以先将要比较的数字添加到列表中,然后使用.Contains()

var forbiddenNumbers = new List<int> { 5, 10 };

if (!forbiddenNumbers.Contains(myNumber))

我没有看到任何理由你不能对你的菜单做同样的事情,因为你只是比较对象引用。 (我不确定这里的类型是什么,所以我只选择了“菜单”。)

var menusToCheck = new List<Menu> { menu1, menu2 };

if (!allowedMenus.Contains(menu))

答案 1 :(得分:1)

您可以使用此扩展方法:

public static class EqualsAnyExtension
{
    public static bool EqualsAny<T>(this T value, params T[] items)
    {
        return items.Contains(value);
    }
}

像这样使用:

if (condition1 != asd && !menu.EqualsAny(menu1, menu2))

答案 2 :(得分:0)

不,你不能像第二个声明那样做。因为

menu != (menu1 && menu2)

意味着“在menu1和menu2上比较菜单与布尔AND操作”。 而

menu != menu1 && menu != menu2

表示“对菜单和菜单1上的比较操作结果应用AND操作,菜单和菜单2上的比较操作”。

答案 3 :(得分:0)

逻辑运算符产生布尔结果。因此:

(menu1 && menu2)

根据变量的值来评估truefalse

如果menu1menu2不是布尔值,那么您需要进行比较以产生布尔值,就像您第一次做的那样:

if(condition1 != asd && menu != menu1 && menu != menu2)

答案 4 :(得分:0)

您尚未指定menu的数据类型,答案可能取决于此。

例如,如果menumenu1menu2都是布尔值,那么这可能会产生一定的逻辑意义

if(menu != (menu1 && menu2))

(相当于menu1,menu2和menu都是相同的布尔值)

然而,如果它们是字符串(或实际上除了布尔值之外的任何东西),那么它就没有意义了。你仍然可以缩短它,但我不推荐它用于2个项目:

var menuItems = new string[]{menu1,menu2}
if(condition1 != asd &&  menuItems.Contains(menu))
{
   ...
}

答案 5 :(得分:0)

 (menu1 && menu2)

 if(condition1 != asd && menu != (menu1 && menu2))

menu1和menu2都需要是bool类型,否则抛出

CS0019:运营商'&amp;&amp;'不能应用于

类型的操作数

我认为除非所有这些都是布尔值,否则不能再缩短,只需在menu1和menu2之间使用XOR operator

答案 6 :(得分:0)

var menusToCheck = new List<Menu> {"abc","def","eee","sdds" };
if (!menusToCheck .Contains(menu))
{
 ..spin..
}

喜欢这个。