Обработка нуля с?

1

Привет, Я получаю следующее сообщение об ошибке при попытке обработать нулевое значение, используя coalesce operator, любая идея, почему?

Невозможно использовать объект типа System.DBNull для ввода System.String

using(SqlDataReader rMemo = cmdUMemo.ExecuteReader())
{
      while (rMemo.Read())
      {                        
           String Title = (String)rMemo["UpdateTitle"] ?? "";
           lblUTitle.Text = Title;
      }
}
Теги:
null

3 ответа

2

Используйте ключевое слово as:

String Title = rMemo["UpdateTitle"] as String ?? "";

Тип DBNull не может быть явно преобразован в строку, однако ключевое слово as попытается выполнить преобразование, а если оно не выполнено, верните null. Это null будет затем соединялись в "" с помощью ?? оператор.

1

Сравните его DBNull.Value и верните пустую строку, например:

 String Title = rMemo["UpdateTitle"] == DBNull.Value ? "" :
                                           rMemo["UpdateTitle"].ToString();

Другой способ сделать то же самое можно было бы использовать Convert.ToString он вернет пустую строку для DBNull.Value

String Title = Convert.ToString(rMemo["UpdateTitle"]);

Помните DBNull.Value.ToString() означает пустую строку. Таким образом, вы можете проверить, есть ли у ваших возвращенных строк столбец UpdateTitle а затем вызвать Convert.ToString как:

string Title = rMemo["UpdateTitle"] != null ? Convert.ToString(rMemo["UpdateTitle"]) 
                                              : "";

Применение Convert.ToString отношении null значений возвращает null не пустую строку.

0

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

public static class ObjectExtensions
{
    public String ToStringOrEmpty(this object obj)
    {
        if(obj == null)
           return String.Empty;

        return obj.ToString();
    } 
}

Тогда вы можете просто называть его так, чтобы ваш код был приятным и читаемым:

String Title = rMemo["UpdateTitle"].ToStringOrEmpty()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню