2010-06-14 44 views
7

Tôi đã tạo một SPROC để lưu một đối tượng và trả về id của đối tượng mới được lưu. Bây giờ, tôi muốn trả lại một int không phải là một int?Làm cách nào để chuyển đổi int? vào 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? 
} 

Cảm ơn vì đã giúp

Trả lời

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

hoặc

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

Lưu ý rằng 'id.Value' sẽ ném một ngoại lệ khi id là null. Trong một số ngữ cảnh, điều đó sẽ phù hợp, nếu không, hãy sử dụng '??'. –

+0

Đây không phải là những gì tôi đề xuất? –

+0

Liệu '??' chỉ hoạt động với Nullable <>, hay các kiểu tham chiếu thông thường? –

3
return id.Value; 

Bạn có thể muốn kiểm tra xem id.HasValue là đúng, và trở về 0 hoặc một cái gì đó nếu không muốn nói.

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

hoặc ** id trả về 0 **. Chính xác như vậy :) –

+1

Đó là một cách khá dài để nói "' id ?? 0' " – Blorgbeard

+0

@Blogbeard: Về mặt kỹ thuật, nó sẽ là' return id ?? 0; ':) –

6

Bạn có thể sử dụng chức năng GetValueOrDefault() trên Nullable.

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

Lưu ý rằng đây là giống với coalescing answer by Richard77 nhưng tôi sẽ nói một chút dễ đọc hơn ...

Tuy nhiên, quyết định này là một ý tưởng tốt là tùy thuộc vào bạn. Như vậy có lẽ một ngoại lệ là thích hợp hơn?

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

return id.Value; 
+1

+1 vì cho rằng ném một ngoại lệ có thể là điều thích hợp để làm. Dường như với tôi rằng quá nhiều lập trình viên rất nhanh chóng sử dụng một giá trị mặc định, mà trước tiên không đảm bảo rằng null không thực sự là một lỗi. – Phong

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

này trả về giá trị của id trong trường hợp nó không phải là null và 0 trong các trường hợp khác.

+0

Có gì sai với 'return id ?? 0; ', thực hiện chính xác điều tương tự và hiệu quả hơn? –

Các vấn đề liên quan