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

Evaluating strings using AND and OR operators

我正在创建一个程序,它只会问候名为 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(&&)不能应用于布尔值和字符串。 能否请您解释并帮助我解决这段代码,并弄清楚它可以接受输入,而不管它是否有大写和小写等。

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

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

此外,&& 与您原始代码中的逻辑不匹配。 || 相当于您的原始代码:

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

and also figuring out, it can accept input regardless if it has upper and lowercase etc.

您可以使用 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)))
{
    // ...
}

但是考虑到这种方法对于您的水平来说有点高级,您现在可能想坚持使用倒数第二个代码段。

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

您还想使用 OR: ||

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

其实应该是

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

使用 || 时,如果 || 两边的任何条件为 true,则整个条件的计算结果为 true

使用 && 时,仅当 && 任一侧的所有 条件都为 true.