Сравните строки в операторе if - PullRequest
3 голосов
/ 04 марта 2012

Попытка написать кусок кода для сравнения двух строк. Если любое из них равно текстовому полю, открывается новая форма win. Я знаю, как сделать часть winform.

string CreditCard1 = "Some numbers";

        string CreditCard2 = "Some Numbers";
        string RFIDCard1 = "E00700000330E44C";
        string RFIDCard2 = "E00700000338E539";

        if(CardScan_txtBx = CreditCard1 || RFIDCard1)`

Я получаю сообщение об ошибке MSVS 2010, в котором говорится:

Оператор '||' нельзя применять к операндам типа 'строка' и 'строка'

Есть ли способ сделать то, что я хочу?

Ответы [ 9 ]

6 голосов
/ 04 марта 2012

Эта строка является виновником:

  if(CardScan_txtBx = CreditCard1 || RFIDCard1)`

Попробуйте:

  if(CardScan_txtBx.Text == CreditCard1 || CardScan_txtBx.Text == RFIDCard1)

Кстати, меня пугает, что вы, очевидно, работаете с информацией о кредитной карте, но нене знаю, как сравнивать значения в текстовом поле.Ради ваших клиентов я действительно очень надеюсь, что вы планируете выяснить, как безопасно управлять этой информацией.

4 голосов
/ 04 марта 2012

Здесь есть три проблемы:

  1. Невозможно сравнить с несколькими значениями с помощью ИЛИ (||).Это удивительно распространенное заблуждение, но оно не имеет смысла для компилятора.
  2. Сравнение в C # выполняется с ==.= для назначения.
  3. A TextBox не является string;вам нужно использовать его свойство Text, чтобы получить или установить содержащийся в нем текст.

В итоге ваш оператор if должен выглядеть так:

1 голос
/ 04 марта 2012

Попробуйте с помощью следующего кода .....

if (CardScan_txtBx.Equals(CreditCard1) || CardScan_txtBx.Equals(RFIDCard1))
{ 
      //Code
}
1 голос
/ 04 марта 2012

Остальные ответы имеют правильный код, вот объяснение почему.Когда вы используете ||оператор, он ожидает, что выражение с любой стороны будет что-то, что оценивается как bool (true или false).Когда вы пишете CardScan_txtBx.Text == CreditCard1 || RFIDCard1, у вас есть оператор, который оценивается как логическое значение слева, CardScan_txtBx.Text == CreditCard1, и у вас есть оператор, который оценивается как строка справа RFIDCard1 Поскольку строка не является логическим значением, вы получаете ошибку времени компиляции,вот почему вы должны повторить оператор == с правой стороны, чтобы вы сказали CardScan_txtBx.Text == RFIDCard1

1 голос
/ 04 марта 2012

См. Здесь: http://msdn.microsoft.com/en-us/library/53k8ybth%28v=vs.71%29.aspx

Не: =

Справа: expr1 == expr2

1 голос
/ 04 марта 2012

Не могли бы вы использовать else if?

if(CardScan_txtBx == CreditCard1)
{
//Do something
} else if(CardScan_txtBx == RFIDCard1)
{ 
//Do something 
}
1 голос
/ 04 марта 2012

Хорошо, у вас есть 2 проблемы: во-первых, одинаковое равенство - это присвоение, а не сравнение, а во-вторых, каждый аргумент, разделенный или должен быть логическим, то есть должен быть

   if(CardScan_txtBx == CreditCard1 ||CardScan_txtBx == RFIDCard1)
1 голос
/ 04 марта 2012

Попробуйте это:

if (CardScan_txtBx.Text == CreditCard1 || CardScan_txtBx.Text == RFIDCard1)
0 голосов
/ 04 марта 2012

Вы также можете использовать список.

List<string> listOfValidStrings = new List<string>();
 //Initialise all valid strings.
if(listOfValidStrings.contains(txtbox.text())
{ do something.}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...