字符串比较中的逻辑OR运算符?

时间:2013-01-23 07:50:05

标签: c#

为什么这种比较失败了?如何比较csharp中交替的字符串?

Static void Main(string[] args)
    {
        string varFoo = "cat";

        if (varFoo != "cat" || varFoo!="duck")
            Console.WriteLine("You can enter.");
        else
            Console.WriteLine("Not allowed.");

        Console.ReadLine();
    }

只想要一些东西

If(Either cat or a Duck)
    // You're not allowed
else
   // you are welcomed.

6 个答案:

答案 0 :(得分:4)

如果我理解你的评论,“猫”是允许的(我认为也允许“鸭子”)。

if (varFoo == "cat" || varFoo=="duck")

上次编辑(猫和鸭子无法进入)。

if (varFoo != "cat" && varFoo !="duck")

这意味着: 如果varFoo == "cat":断言将失败(左侧部分被评估,因为它是假的,右侧部分未被评估=>假)。

如果varFoo == "duck":断言将失败(左侧部分被评估,它是真的,那么右侧部分被评估,它是假的=>假)

这只是布尔生活方式:

true or false => true
true or true => true
true and false => false
false and true => false

答案 1 :(得分:3)

无论实际价值是多少,你的一个条件总是如此。你可能想要一个不同的比较。

考虑到更新后的问题,您需要查找表达式varFoo != "cat" && varFoo != "duck",因为您显然混淆&&(两个条件都必须为真)和||(任何条件都必须是真的。)

答案 2 :(得分:2)

来自您的评论

  问:它以什么方式失败? - dutzu

     

答:允许猫._。

我认为你想要消灭猫鸭子。

由于Logical OR Operator ||,您的条件失败。第二个条件得到评估,因为"cat" != "cat"返回false但"cat" != "duck"返回true。这就是猫也被允许进入的原因。

您可能希望停止使用

进入
if (varFoo != "cat" && varFoo != "duck")
    Console.WriteLine("You can enter.");
else
    Console.WriteLine("Not allowed.");

更新您上次编辑支持我的观点:

  

只想要一些东西

If(Either cat or a Duck)
    // You're not allowed

以不同的方式理解:你定义一个动作,这是为了防止一些动物进入。您想在cats ducks上应用此操作。您需要AND代替  一个OR。 (见上面的代码)

另一种方法是定义禁止动物的集合并使用Contains

IEnumerable<string> forbiddenAnimals = new List<string>(){ "cat", "duck" };
if(forbiddenAnimals.Contains(varFoo))
    // You're not allowed
else
    // you are welcomed

答案 3 :(得分:1)

if (varFoo != "cat" || varFoo!="duck")

翻译:

varFoo不等于cat或者varFoo不等于duck。由于varFoo不是duck;它返回true。

答案 4 :(得分:1)

你可能想要这个:

if (varfoo != "cat" && varfoo != "duck")
  //You can enter.

使用||所有字符串都会失败。

答案 5 :(得分:1)

if(varFoo != "cat" || varFoo != "duck") 所以 if( false || true ) false或true == true。 它没有失败。