为什么这种比较失败了?如何比较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.
答案 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。
它没有失败。