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