在“if”语句中使用带有字符串的“或”运算符

时间:2013-11-02 13:13:05

标签: c# string

无论如何都要修复这个陈述

if (sAwnser == ("hello" || "Hello" || "hi" || "Hi" || "hey" || "Hey" || "Hay" || "hey"))
{

}

它出现了错误

Operator '||' cannot be applied to operands of type 'string' and 'string'

如果有人可以提供帮助,将非常感激

10 个答案:

答案 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)

首先,我想指出问题的根源;

来自|| Operator (C# Reference)

  

条件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;

应该

  1. 始终执行,因为someBool始终为truefalse,或
  2. 仅在someBooltrue时执行,因为true || falsetrue
  3. 我所知道的每种编程语言(其中都适用)选择第二种情况,并且可以推广到其他类似的结构(例如您的示例),甚至更一般地,查看任何子表达式隔离足以确定它的作用。选择第一种方式使得你必须先查看整个表达式,然后才能确定它的任何子表达式可能意味着什么,因为它们的含义可能取决于它们外部的东西。

答案 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!!");
    }   
}