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

本文关键字:OR 运算符 比较 字符串 | 更新日期: 2023-09-27 17:55:28

为什么这个比较失败?我如何比较 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.

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

如果我理解您的评论,"猫"是允许的(我想"鸭子"也是允许的)。

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

上次编辑(猫和鸭不能进入)。

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

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

如果varFoo == "duck":断言将失败(评估左侧部分,为真,然后评估右侧部分,为 false => false)

这只是布尔的生活方式:

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

无论实际值是多少,您的条件之一始终为真。您可能想要一个不同的比较。

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

来自您的评论

问:它以什么方式失败?

答:猫是允许的._。

我假设你想赶走猫鸭。

由于逻辑 OR 运算符||,您的条件失败。第二个条件被评估,因为"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

换个理解:你定义一个动作,这是为了防止一些动物进入。您希望对catsducks应用此操作。您需要一个ANDOR.(见上面的代码)

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

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

译本:

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

你可能想要这个:

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

使用 || 它将始终在所有字符串上失败。

if(varFoo != "cat" || varFoo != "duck")所以 if( false || true )假或真 == 真。它不会失败。