有没有办法解决这个问题
if (sAwnser == ("hello" || "Hello" || "hi" || "Hi" || "hey" || "Hey" || "Hay" || "hey"))
{
}
它出现了错误
Operator '||' cannot be applied to operands of type 'string' and 'string'
如果有人可以提供帮助,将不胜感激
为了避免这么多比较,你可以做
var list = new string[] {"hello", "Hello", "hi", "Hi", "hey", "Hey", "Hay", "hey"};
if (list.Contains(answer))
{
}
您必须每次都显式引用第一个变量。
sAwnser == "hello"
返回一个布尔值。您不能将布尔值与字符串进行比较。
您可以做的是创建一个集合并将所有单独的字符串添加到其中。之后你就可以在上面使用.Contains()
了。
首先,我想指出您问题的根源;
条件或运算符 (||) 对其布尔 操作数执行逻辑或。
因此,您不能将string
值与||
运算符一起使用。两个操作数都应该是boolean
值。
您也可以使用 LINQ Enumerable.Any
;
string[] array = new string[] {"hello", "Hello", "hi", "Hi", "hey", "Hey", "Hay", "hey"};
if (array.Any(sAwnser.Equals))
{
// Your sAwnser is equal one of your array values.
}
一种可能的语法是创建一个扩展方法,如下所示:
public static bool EqualsAny<T>(this T input, params T[] items)
{
return items.Contains(input);
}
然后你可以这样调用:
if (sAnswer.EqualsAny("hello", "Hello", "hi", "Hi", "hey", "Hey", "Hay", "hey"))
{
...
}
你也可以这样做:
var sAnswer = "hello";
var answerList = new List<string> { "HELLO", "HI", "HEY", "HAY" };
bool checkAnswer = answerList.Any(r => r == sAnswer.ToUpper());
使用linq
,你可以将选项设置为大写,然后.ToUpper()
答案
if (sAwnser == "hello" || sAwnser == "Hello" || sAwnser == "hi" || sAwnser == "Hi" || sAwnser == "hey" || sAwnser =="Hey" || sAwnser =="Hay" || sAwnser =="hey"))
{
}
或者您可以编写一个单独的函数来进行检查
private bool CheckInput(String input)
{
String[] sAwnser = {"hello", "Hello", "hi", "Hi", "hey", "Hey", "Hay", "hey"};
for (int i = 0; i < sAwnser.Length; i++)
{
if (sAwnser[i].Equals(input));
return true;
}
return false;
}
大多数编程语言都不是这样工作的。您实际上是在要求它进行计算"hello" || "Hello" || etc..
,并且||
运算符不能应用于字符串(无论如何,您希望结果是什么?)
表达式显示为比较的右侧是无关紧要的。还要考虑如果不是这种情况会发生什么——这意味着什么?
if (someBool == (true || false))
something;
那应该
someBool
总是要么true
or false
, orsomeBool
is时执行true
,因为true || false
is true
?我所知道的每种编程语言(适用于其中)都选择第二种情况,并且可以将其推广到看起来相似的其他构造(例如您的示例),甚至更普遍地说,孤立地查看任何子表达式就足够了来确定它的作用。选择第一种方式使得您必须先查看整个表达式,然后才能确定它的任何子表达式可能意味着什么,因为它们的含义可能取决于它们外部的某些东西。
实际上你可以在这里做的是:
if ((sAwnser == "hello") || (sAwnser =="Hello") || (sAwnser =="hi") || (sAwnser =="Hi") || (sAwnser =="hey") || (sAwnser =="Hey") || (sAwnser =="Hay") || (sAwnser =="hey"))
{
//insert code here
}
与其他建议相比,这可能是最简单的编码方式,但有些人可能认为这不是一个好习惯。无论如何,玩得开心编码。
您还可以使用所有这些值声明一个 const 字符串,并且每次需要检查时只需调用 contains 方法:
private const string test = "HellohelloHihiHeyhey";
static void Main(string[] args)
{
string UserInput = Console.ReadLine();
if (test.Contains(UserInput))
{
Console.WriteLine("success!!");
}
}
使用 .Equals() 比较字符串
String sAnswer = "hello";
if( sAnswer.Equals("hello")|| sAnswer.Equals("Hi"))
System.Console.Write("yes");
else
System.Console.Write("no");
如果您不想进行区分大小写的比较,您可以将 sAnswer 大写,这样您就不必与同一字符串的多个变体进行比较
String sAnswer1 = "hello";
String sAnswer2 = "heLLo";
String sAnswer3 = "HellO";
sAnswer = sAnswer.ToUpper();
if( sAnswer1.Equals("HELLO")) -> True
if( sAnswer2.Equals("HELLO")) -> True
if( sAnswer3.Equals("HELLO")) -> True
另外,如果您使用 contains() 方法,请小心:
String sAnswer = "watching";
if( sAnswer.Contains("hi"))
会让你返回真实的(因为 watchHIng 包含“hi”),我不认为你想要那个