-1

この比較が失敗するのはなぜですか? 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.
4

6 に答える 6

4

あなたのコメントが理解できれば、「猫」は許可されます (「アヒル」も許可されると思います)。

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

最後の編集で(猫とアヒルは入ることができません)。

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

これは、if varFoo == "cat": アサーションが失敗することを意味します (左の部分は false であるため評価され、右の部分は評価されません => false)。

if varFoo == "duck": アサーションは失敗します (左側の部分が評価され、true であり、右側の部分が評価され、false => false)

これは単なるブール値の生き方です:

true or false => true
true or true => true
true and false => false
false and true => false
于 2013-01-23T07:53:02.693 に答える
3

実際の値が何であれ、条件の 1 つが常に真です。おそらく、別の比較が必要だったでしょう。

更新された質問を考慮すると、 (両方の条件が真でなければならない) と(どちらかの条件が真でなければならない)varFoo != "cat" && varFoo != "duck"を明らかに混同しているため、式を探していることになります。&&||

于 2013-01-23T07:53:21.193 に答える
2

コメントより

Q:どのように失敗しますか?– デュッツ

A: 猫は許可されています._.

猫やアヒルを遠ざけたいと思います。

論理 OR 演算子||が原因で条件が失敗します。2 番目の条件は、"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
于 2013-01-23T08:01:20.347 に答える
1
if (varFoo != "cat" || varFoo!="duck")

翻訳:

varFoo が と等しくない、catまたは varFoo が と等しくないduck。varFoo ではないのでduck; true を返します。

于 2013-01-23T07:55:03.430 に答える
1

おそらくこれが必要です:

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

|| で すべての文字列で、常に失敗します。

于 2013-01-23T07:59:04.450 に答える
1

if(varFoo != "cat" || varFoo != "duck") だから if( false || true )偽または真==真。失敗しません。

于 2013-01-23T07:59:22.463 に答える