Int? C #, используется в ссылке, что именно это - PullRequest
1 голос
/ 05 декабря 2009

может быть ребенком, вопрос о бидди, но

Я пытался передать параметр «output» в хранимую процедуру, используя C Sharp, и получал сообщение об ошибке, пока я не передал переменную «output», используя следующий синтаксис:

int? ROWID = 0;
ADAPTER.INSERT(val1, val2, ref ROWID);

Хотя проблема решена, я просто не могу понять, почему, когда я пытаюсь удержать значение в обычном «int», возвращаемом хранимым процедурой, это дает ошибку преобразования

int result = ROWID; // not correct

Итак, что мне нужно сделать, это:

int result = (int)ROWID; // correct

Что именно означает "int?" значит?

Ответы [ 6 ]

9 голосов
/ 05 декабря 2009

int? является обнуляемым int. Прочитайте Использование типов Nullable (Руководство по программированию в C #) .

Кстати, если вы не прочитали полностью руководство, по крайней мере, проверьте свойства HasValue и Value в вашей переменной ROWID.

7 голосов
/ 05 декабря 2009

INT? совпадает с Nullable<int> и означает, что значение может быть целым числом или нулевым значением.

Вероятно, это связано с тем, что для столбца вашей базы данных задано значение NULL, а не NOT NULL. Если в вашей базе данных действительно могут быть нулевые значения, ваш код завершится с ошибкой, за исключением приведения. Если в базе данных не может быть пустых значений, вам следует изменить определение схемы для этого столбца, отличного от NOT NULL, чтобы оно сопоставлялось с int вместо int?.

5 голосов
/ 05 декабря 2009

INT? имеет значение null int (system.nullable), может принимать значение null.

Лучший способ конвертировать - это null coallesce:

int result = rowid ?? 0;
2 голосов
/ 05 декабря 2009

int? - обнуляемое целое число. Подробнее см. На странице MSDN Обнуляемые типы .

1 голос
/ 05 декабря 2009

Это обнуляемый тип.

Подробнее о них можно узнать здесь:

Обнуляемые типы

0 голосов
/ 05 декабря 2009

Я бы предложил это:

        int? ROWID = 0;
        ........
        int result = ROWID.HasValue ? ROWID.Value : 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...