Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串比较中的逻辑OR运算符?_C# - Fatal编程技术网

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

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.

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

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

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

这意味着: 如果
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