C# 字符串比较中的逻辑OR运算符?
为什么这种比较失败?如何比较csharp中的交替字符串C# 字符串比较中的逻辑OR运算符?,c#,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.
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.
如果我理解你的评论,“猫”是允许的(我想“鸭子”也是允许的) 上次编辑时(猫和鸭不能进入) 这意味着: 如果
varFoo==“cat”
:断言将失败(计算左部分,因为它为false,而不计算右部分=>false)
如果varFoo==“duck”
:断言将失败(计算左部分,它为true,然后计算右部分,它为false=>false)
这就是布尔式的生活方式:
true or false => true
true or true => true
true and false => false
false and true => false
无论实际值是多少,您的条件之一始终为真。你可能想要一个不同的比较 考虑到更新的问题,您将寻找表达式
varFoo!=“猫”&&varFoo!=“duck”
,因为您显然混淆了&&
(两个条件都必须为真)和|
(两个条件都必须为真)
翻译:
varFoo不等于
cat
或varFoo不等于duck
。因为varFoo不是duck
;它返回true。您可能希望:
if (varfoo != "cat" && varfoo != "duck")
//You can enter.
使用| |时,在所有字符串上都会失败。if(varFoo!=“cat”| | varFoo!=“duck”)
所以
if(false | | true)
false或true==true。
它没有失败。根据您的评论
问:它以什么方式失败杜特祖
A:允许养猫
我猜你想赶走猫和鸭子
您的条件失败,因为。第二个条件得到计算,因为“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
else
// you are welcomed.
不同的理解:你定义了一个动作,这是为了阻止一些动物进入。您希望对猫和鸭子应用此操作。您需要一个和
属于或。(见上述代码)
另一种方法是定义禁止动物的集合,并使用包含:
IEnumerable<string> forbiddenAnimals = new List<string>(){ "cat", "duck" };
if(forbiddenAnimals.Contains(varFoo))
// You're not allowed
else
// you are welcomed
IEnumerable bankedenanimals=new List(){“猫”,“鸭”};
if(禁止动物包含(varFoo))
//你是不被允许的
其他的
//欢迎你
再次查看您使用的逻辑运算符并思考:每个物体不是猫就是鸭子。这适用于猫、鸭和任何你能想到的东西。它将被允许,因为它是一个条件,或者第二个条件是真的,所以它将进入“猫”而不是“鸭”,所以if
语句返回true你确定不想停止猫和鸭的安装吗<代码>如果
varFoo!=“猫”&&varFoo=“鸭子”`+1-我相信这就是OP需要的。(根据OP的评论,猫是被允许的)
。@TimSchmelter嗯,我必须承认,这并不清楚。据我所知,如果varFoo==“cat”(允许cat),则“您可以输入”。好吧,我也给了你“理解力”。@DamienJoe然后第二个“版本”的答案是正确的。我完成了我的回答。谢谢拉斐尔提供的所有细节。蒂姆对&&运算符的看法是正确的。@DamienJoe让我们假设变量动物是“猫”。测试是:如果(动物!=“猫”)
。这意味着:告诉我这个断言是真是假:“可变动物不同于猫”。由于可变动物和猫并没有什么不同,所以结果是错误的。更清楚了吗?谢谢蒂姆的精彩回复。我想远离猫或鸭子,所以我使用了逻辑OR。我认为如果是匹配的话,if条件将在任何一个条件下进行评估。更新了我的帖子。@DamienJoe:还不清楚,没有合理的“让猫**”或“**鸭子远离”。如果你想避免使用这两种方法,你可以使用
和`(在语言、数据库或编程中)。@DamienJoe:编辑我的答案以使它(希望)更清晰。谢谢Tim,我真的很喜欢你建议的第二种方法,它非常清晰和简洁。最后两种条件都被评估了吗?如果第一个条件是真的,那么第二个将不被处理。但在本例中,由于第一个条件为false,第二个条件将被计算。如何检查这两个条件?
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
IEnumerable<string> forbiddenAnimals = new List<string>(){ "cat", "duck" };
if(forbiddenAnimals.Contains(varFoo))
// You're not allowed
else
// you are welcomed