字符串比较中的逻辑 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.
如果我理解您的评论,"猫"是允许的(我想"鸭子"也是允许的)。
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
换个理解:你定义一个动作,这是为了防止一些动物进入。您希望对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
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 )
假或真 == 真。它不会失败。