【问题标题】:Evaluating strings using AND and OR operators使用 AND 和 OR 运算符评估字符串
【发布时间】:2016-07-03 10:59:42
【问题描述】:

我正在创建一个程序,该程序只会在命名为 carley 和 zack 的情况下向该人打招呼。

string name1 = "Carley";
        string name2 = "Zack";

        Console.Write("What's your name? : ");
        string name =  Console.ReadLine();


        if (name == name1)
        {
            Console.WriteLine("Glad to meet you " + name + "!");
        }
        else if (name == name2)
        {
            Console.WriteLine("Glad to meet you " + name + "!");
        }
        else
        {
            Console.WriteLine("press any key to exit.");
        }
        Console.Read();

我在这里,希望通过尝试将输入的评估放在“if”的一个语句中来简化代码:

        if (name == name1 && name2)
        {
            Console.WriteLine("Glad to meet you " + name + "!");
        }
        else
        {
            Console.WriteLine("press any key to exit.");
        }
        Console.Read();

但它说 AND (&&) 不能应用于布尔值和字符串。 您能否解释一下并帮助我解决此代码,并弄清楚它是否可以接受输入,无论它是否有大小写等。

【问题讨论】:

标签: c# assignment-operator


【解决方案1】:

您不能使用&& 将一个值与其他两个值进行比较。你需要两个比较:

if (name == name1 && name == name2)

另外,&& 与原始代码中的逻辑不匹配。 || 将等同于您的原始代码:

if (name == name1 || name == name2)

并且还弄清楚,它可以接受输入,无论它是否有大小写等。

您可以使用name.Equals(..., StringComparison.InvariantCultureIgnoreCase) 进行不区分大小写的比较:

if (name.Equals(name1, StringComparison.InvariantCultureIgnoreCase) || 
    name.Equals(name2, StringComparison.InvariantCultureIgnoreCase))

由于这开始有点冗长,您可以将可接受的名称放入一个数组中,然后使用.Any()。这种方法将允许您指定任意数量的有效名称:

string[] validNames = new[] { "Carley", "Zack" };
if (validNames.Any(n => 
       n.Equals(name, StringComparison.InvariantCultureIgnoreCase)))
{
    // ...
}

但是考虑到这种方法对你的级别来说有点高级,你现在可能想坚持倒数第二个 sn-p。

【讨论】:

  • name 不能等于 name1 AND 等于 name2,你的意思是 OR?
  • 太棒了!感谢您在这里给我广泛的选择和解释。我会记住这一点以备将来使用:)
【解决方案2】:

&& 的两边都将被评估(作为布尔值)。 name2 只是不做你想做的事。您应该明确指定比较。

您还想使用 OR:||

if ((name == name1) || (name == name2))

【讨论】:

    【解决方案3】:

    其实应该是的

        if (name == name1 || name == name2)
        {
            Console.WriteLine("Glad to meet you " + name + "!");
        }
        else
        {
            Console.WriteLine("press any key to exit.");
        }
    

    当使用|| 时,如果|| 每一侧的任何条件为true,则整个条件将评估为true

    当使用&& 时,整个条件将评估为true仅当&& 任一侧的所有条件都是true

    【讨论】:

    • 哈哈,有趣的是我不认为它应该评估 2 个语句,而不是在一个语句之间然后是一个变量。我会记住这一点。谢谢老哥!
    猜你喜欢
    • 1970-01-01
    • 2013-10-13
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    相关资源
    最近更新 更多