无论如何都要修复这个陈述
if (sAwnser == ("hello" || "Hello" || "hi" || "Hi" || "hey" || "Hey" || "Hay" || "hey"))
{
}
它出现了错误
Operator '||' cannot be applied to operands of type 'string' and 'string'
如果有人可以提供帮助,将非常感激
答案 0 :(得分:12)
为了避免这么多的比较,你可以做到
var list = new string[] {"hello", "Hello", "hi", "Hi", "hey", "Hey", "Hay", "hey"};
if (list.Contains(answer))
{
}
答案 1 :(得分:8)
每次都必须明确引用第一个变量。
sAwnser == "hello"
返回一个布尔值。您无法将布尔值与字符串进行比较。
您可以做的是创建一个集合并将所有单独的字符串添加到该集合中。之后您可以使用.Contains()
。
答案 2 :(得分:3)
首先,我想指出问题的根源;
条件OR运算符(||)执行 bool 的逻辑或运算 操作数。
因此,您无法将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.
}
答案 3 :(得分:3)
一种可能的语法是创建扩展方法,如下所示:
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"))
{
...
}
答案 4 :(得分:2)
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;
}
答案 5 :(得分:2)
你也可以这样做:
var sAnswer = "hello";
var answerList = new List<string> { "HELLO", "HI", "HEY", "HAY" };
bool checkAnswer = answerList.Any(r => r == sAnswer.ToUpper());
使用linq
,您可以将选项设置为大写,.ToUpper()
答案
答案 6 :(得分:1)
大多数编程语言不能像那样工作。您实际上是要求它计算"hello" || "Hello" || etc..
并且||
运算符不能应用于字符串(无论如何,您希望结果是什么?)
表达式显示为比较的右侧是无关紧要的。还要考虑如果不是这种情况会发生什么 - 这意味着什么?
if (someBool == (true || false))
something;
应该
someBool
始终为true
或false
,或someBool
为true
时执行,因为true || false
为true
?我所知道的每种编程语言(其中都适用)选择第二种情况,并且可以推广到其他类似的结构(例如您的示例),甚至更一般地,查看任何子表达式隔离足以确定它的作用。选择第一种方式使得你必须先查看整个表达式,然后才能确定它的任何子表达式可能意味着什么,因为它们的含义可能取决于它们外部的东西。
答案 7 :(得分:0)
使用.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"))
将返回true(因为watcHIng包含“hi”)并且我认为你不想那样
答案 8 :(得分:0)
实际上你在这里可以做的是:
if ((sAwnser == "hello") || (sAwnser =="Hello") || (sAwnser =="hi") || (sAwnser =="Hi") || (sAwnser =="hey") || (sAwnser =="Hey") || (sAwnser =="Hay") || (sAwnser =="hey"))
{
//insert code here
}
与其他建议相比,这可能是最简单的编码方式,但有些人可能认为这不是一个好习惯。无论如何,有乐趣编码。
答案 9 :(得分:0)
您还可以使用所有这些值声明一个const字符串,并且每次只需要检查调用contains方法:
private const string test = "HellohelloHihiHeyhey";
static void Main(string[] args)
{
string UserInput = Console.ReadLine();
if (test.Contains(UserInput))
{
Console.WriteLine("success!!");
}
}