Если вся программа должна остановиться, использование sys.exit () иначе просто используют пустой возврат.
row ["PersonID"]
относится к типу object, что означает, что! = И == будут использовать ссылочный идентификатор . В основном вы сравниваете упакованные значения.
Если вы используете:
if (!object.Equals(row["PersonID"], tbxPersonID.EditValue))
, тогда вы получите семантику равенство значений , и я подозреваю, что с вами все будет в порядке - при условии, что tbxPersonID действительно является an int
, в рамке или без.
Чтобы конкретизировать, вот короткий, но полный пример, чтобы показать, о чем я говорю:
using System;
class Test
{
static void Main()
{
object first = 2;
object second = 2;
// Compares reference equality: false
Console.WriteLine(first == second);
// Compares value equality: true
Console.WriteLine(object.Equals(first, second));
}
}
Я предполагаю, что тип данных объекта row [] похож на int (или bool), а chkCitizen.EditValue имеет другой тип данных. Так что, возможно, вы сравниваете '1' == 1 и получаете ложный результат.
Какой тип EditValue или правое значение? Проблема, вероятно, в том, что EditValue не относится к типу строки (возможно, это подкласс или что-то в этом роде), поэтому, когда вы делаете! = Или == на нем, он выполняет сравнение адресов памяти вместо сравнения для строки, поэтому вместо этого вы получаете false истинного
Без вызова ToString ()
ваш код проверяет равенство на двух объектах, а не на двух числах, что является причиной того, почему он не работает.
Используя ToString ()
ваше явное указание коду получить значения из объектов row []
и EditValue.
Я не знаю C #, но в некоторых языках проверка на равенство отличается для числовых значений и строк. Итак, здесь вам нужно принудительно выполнить сравнение строк, прежде чем оно сработает.
Это что-то нам говорит?