2014-01-08 8 views
2
string valueStr = " "; //"(123)-456-7890" or null or " " or "" or string.Empty or "abcdef" 
int valueInt; 

if (valueStr.Trim() != null || valueStr.Trim() != string.Empty || valueStr.Trim() != "") 
{ 
    //Perform regex routine to convert valueStr to valueInt and get only digits 
} 
else 
{ 
    valueInt = null; 
} 

Я буду вставлять данные в SQL Db. Я пытаюсь очистить буквенно-числовой столбец {(n) varchar} только числовым {int}.C# - Ошибка преобразования Null

Однако приведенная выше логика дает мне ошибку для "valueInt = null;" часть.

Error = "Cannot convert null to int because it is a non-nullable value type" 

Как я могу убедиться, что код будет выполнять регулярные функции выражения только для строк, имеют некоторые данные и выдает ноль, если нет данных?

Спасибо

Update:

string valueStr = " "; //"(123)-456-7890" or null or string.Empty or " " or "abcdef" 
int? valueInt; 

    if (valueStr != null && valueStr.Trim() != "") 
    { 
     string pattern = string.Empty; 
     pattern = "[^0-9]"; 
     Regex r = null; 
     r = new Regex(pattern, RegexOptions.Compiled); 
     try 
     { 
      valueInt = Convert.ToInt32(Regex.Replace(valueStr, pattern, string.Empty)); 
     } 
     catch 
     { 
      valueInt = null; 
     } 
     Console.WriteLine(valueInt); 
     Console.ReadLine(); 
    } 
    else 
    { 
     valueInt = null; 
     Console.WriteLine(valueInt); 
     Console.ReadLine(); 
    } 
+3

Сделать это обнуляемым ..? –

+1

Сделайте его нулевым или равным некоторому значению, например '-1'. –

+1

Код может быть только для демонстрации, но на всякий случай стоит отметить, что в вашей третьей строке, если 'valueStr' равно null, вы получите' NullReferenceException'. Кажется, что нет никакого способа .Trim() 'может возвращать null в противном случае, поэтому вы можете удалить' .Trim() 'из первой части условия. – TheEvilPenguin

ответ

2

Определите valueInt переменную как это:

int? valueInt; 

Затем вы можете назначить его null.For больше информации о Nullable types см documentation

2

Вы не можете присвоить NULL к int. Однако вы можете присвоить значение null Nullable<int> или int?.

1

Вам нужно сделать переменную обнуляемого ИНТ, если вы хотите присвоить NULL к ней:

int? valueInt; 
1
  1. Посмотрите на использование String.IsNullOrEmpty, это полезный ярлык. http://msdn.microsoft.com/en-us/library/system.string.isnullorempty(v=vs.110).aspx

  2. Является ли столбец базы данных valueInt нулевым?

  3. Вы не можете установить целое число в Null. Просмотрите типы Nullable или попробуйте установить отличное значение по умолчанию, например 0 или -1.

+0

Source column = string, будет иметь нулевой или пустой спа ces или apha-numaric. Столбец назначения имеет тип данных int и имеет значение NULL. Моя цель состоит в том, чтобы передать только цифры из w/e и если нет цифр, назначьте его (int) null. – 007

+0

Проверьте String.IsNullOrEmpty, чтобы исправить ошибку нулевой ссылки строки EvilPengiun. Я не знаю, как вы вставляете значения в sql, но вы можете использовать тип с нулевым значением или иметь переключатель на вставке. Я думаю, что объявленные целые числа имеют базовое значение 0, поэтому вы можете проверить 0 и переключиться с помощью Null. – Dassina

1

В случае целых чисел, вы можете, как присвоить некоторое произвольное число, которое может быть проверено с тем же оператором равенства, ==, как если бы вы были назначить null.
Что-то вроде этого:

// fail case 
valueInt = -1; 

Значение -1 не то же самое, как null, но могут быть проверены на в более позднем if состоянии, чтобы увидеть, если «глючить случай» произошел в тестовом случае.
Затем вы можете сделать что-то подобное позже:

if (valueInt == -1) 
{ 
    Console.WriteLine("Value not captured correctly. Value must be a number."); 
} 
+0

со значениемStr = "", мой код внутри условия if выполняется, имеет ли это какое-либо отношение к нему? Я все еще немного запутался в этом произвольном значении -1. Продолжаю читать снова ... одно слово за раз. – 007

+0

Я предполагал, что 'valueStr =" "' были только тестовыми данными. Вы правильно санируете телефонные номера? Вы используете регулярное выражение, чтобы вырезать '(,), -' или используете просто замену? –

+0

Обновлен OP. :) и да, я дезинфицирую телефонные номера. – 007

Смежные вопросы