2010-06-14 3 views
7

Я создал SPROC, который сохраняет объект и возвращает идентификатор сохраненного нового объекта. Теперь я хотел бы вернуть int int int?Как преобразовать int? в int

public int Save(Contact contact) 
{ 
    int? id; 
    context.Save_And_SendBackID(contact.FirstName, contact.LastName, ref id); 
    //How do I return an int instead of an int? 
} 

Спасибо за помощь

ответ

16
return id.Value; // If you are sure "id" will never be null 

или

return id ?? 0; // Returns 0 if id is null 
+1

Обратите внимание, что 'id.Value' выдаст исключение, если id равен null. В некоторых контекстах это будет уместно, иначе используйте '??'. –

+0

Разве это не то, что я предложил? –

+0

Работает ли '??' только с Nullable <>, а также с обычными ссылочными типами? –

3
return id.Value; 

Вы могли бы хотеть проверить, если id.HasValue истинно, и возвращает 0, или что-то, если нет.

0
if (id.HasValue) return id.Value; 
else return 0; 
+1

или ** return id ?? 0 **. Точно так же :) –

+1

Это довольно длинный способ сказать «' id? 0' » – Blorgbeard

+0

@Blogbeard: Технически это будет' return id ?? 0; ':) –

6

Вы можете использовать функцию GetValueOrDefault() на Nullable.

return id.GetValueOrDefault(0); // Or whatever default value is wise to use... 

Обратите внимание, что это похоже на coalescing answer by Richard77, но я бы сказал, немного более читаемым ...

Однако, решив ли это хорошая идея до вас. Возможно, что исключение является более подходящим?

if (! id.HasValue) 
    throw new Exception("Value not found"); // TODO: Use better exception type! 

return id.Value; 
+1

+1, предполагая, что бросать исключение может быть подходящей задачей. Мне кажется, что слишком много программистов очень быстро используют значение по умолчанию, не убедившись, что нуль на самом деле не является ошибкой. – Phong

0
return id.HasValue ? id.Value : 0; 

это возвращает значение идентификатора в случае, если он не пустой, и 0 в противном случае.

+0

Что случилось с 'return id? 0; ', что делает то же самое и более эффективно? –

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