Преобразовать нулевое значение в строку - C # .NET - PullRequest
3 голосов
/ 23 мая 2010
    foreach (PropertyInfo PropertyItem in this.GetType().GetProperties())
    {
        PropertyItem.SetValue(this, objDataTable.Rows[0][PropertyItem.Name.ToString()], null);
    }

В одном из циклов я получаю эту исключительную ошибку:

Объект типа 'System.DBNull' нельзя преобразовать в тип 'System.String'.

Ошибкапроисходит потому, что одно из полей в базе данных не имеет значения (null), поэтому свойство string не может его обработать.Как я могу преобразовать этот ноль в строку?

Я получил это решение

Если вы знаете более короткий или лучший вариант, не стесняйтесь опубликовать его.Я пытаюсь избежать проверки в каждом цикле, является ли текущее значение нулевым или нет.

Ответы [ 3 ]

5 голосов
/ 23 мая 2010

Бен Получил это почти правильно (я действительно думаю, что это просто "опечатка" с его стороны, но я не могу отредактировать это для него). Это должно сработать.

foreach (PropertyInfo PropertyItem in this.GetType().GetProperties())
    {
        var value = objDataTable.Rows[0][PropertyItem.Name.ToString()];
        PropertyItem.SetValue(this, value == DBNull.Value ? "" : value.ToString() , null);
    }

И вам нужно проверять en каждую итерацию, так как это значение в данной ячейке в данной строке, на самом деле нет способа избежать проверки каждого из этих значений в ячейке перед их использованием

1 голос
/ 23 мая 2010

Нет другого решения, кроме проверки нуля, где есть разыменование или вызов метода.

Если PropertyItem.Name может быть нулевым или PropertyItem.SetValue не может принять нулевое значение, тогда у вас есть для проверки каждого цикла.

0 голосов
/ 23 мая 2010
foreach (PropertyInfo PropertyItem in this.GetType().GetProperties())
    {
        string strValue = objDataTable.Rows[0][PropertyItem.Name.ToString()] == DbNull.Value ? String.Empty : objDataTable.Rows[0][PropertyItem.Name.ToString()].ToString();
        PropertyItem.SetValue(this, strValue, null);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...