C #: вернуть dbnull.value или system.type из функции? - PullRequest
2 голосов
/ 08 мая 2011

Я хочу создать функцию (c #):

int PutInt (int? x)
{
    if (x.HasValue)
        return x.Value;
    else
        return DBNull.Value;
}

но нет преобразования от int к DBNull.Value. Есть ли способ создать такую ​​функцию?

Ответы [ 4 ]

3 голосов
/ 08 мая 2011

По своей сути это невозможно - типы значений не могут быть нулевыми.

Вам необходимо использовать обнуляемый тип (int?), что делает вашу функцию совершенно бесполезной.

2 голосов
/ 08 мая 2011

Предположим, что ваша СУБД является SQLServer, вы можете преобразовать свою функцию в

object PutInt (int? x)
{
    if (x.HasValue)
        return (object)x.Value;
    else
        return (object)DBNull.Value;
}

, поскольку свойство SQLParamater Value предполагает тип объекта.Надеюсь, я отвечу на ваш вопрос.

1 голос
/ 08 мая 2011

Если вы просто присваиваете тип переменной объекта, я предлагаю вам просто забыть об использовании метода и просто использовать условное присваивание

 object obj = (x.HasValue? x.Value : DBNull.Value);
1 голос
/ 08 мая 2011

Нет, вы не можете разыграть int до DBNull.Value. Это используется для оценки содержимого полей базы данных, а не обнуляемых типов. Значение обнуляемого типа будет просто null.

Лучше, чем определенная вами функция, - использовать нуль-оператор объединения (??).

У него очень похожая логика на ту, которую вы пытались создать в своей функции. Рассмотрим следующие строки кода:

// Declare a nullable int, and set it to null
int? x = null;

// Assign int y to x, unless x is null, in which case, set y = -1
int y = x ?? -1;

// The variable y now has a value of -1
Console.WriteLine(y);
...