使用AND和OR运算符评估字符串

时间:2016-03-17 08:06:00

标签: c# assignment-operator

我正在创建一个程序,只有在命名为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(&&)不能用于布尔值和字符串。 能否请您解释并帮助我解决这个问题,并且搞清楚,它可以接受输入,无论它是大写还是小写等。

3 个答案:

答案 0 :(得分:5)

您无法使用&&将一个值与另外两个值进行比较。您需要进行两次比较:

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)))
{
    // ...
}

但考虑到这种方法对你的关卡来说有点先进,你可能想要坚持现在倒数第二个片段。

答案 1 :(得分:5)

实际上,它应该是

    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 :(得分:2)

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

您还想使用OR:||

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