2010-06-14 19 views
7

Ich habe einen SPROC erstellt, der ein Objekt speichert und die ID des neuen gespeicherten Objekts zurückgibt. Nun würde ich gerne einen int nicht einen int zurückgeben?Wie konvertiere ich int? in 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? 
} 

Vielen Dank für

Antwort

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

oder

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

Beachten Sie, dass 'id.Value' eine Ausnahme auslöst, wenn id null ist. In manchen Kontexten ist das angemessen, andernfalls verwenden Sie '??'. –

+0

Ist das nicht, was ich vorgeschlagen habe? –

+0

Funktioniert '??' nur mit Nullable <> oder auch regulären Referenztypen? –

3
return id.Value; 

Vielleicht möchten Sie überprüfen, ob id.HasValue wahr ist und 0 zurück oder etwas, wenn nicht.

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

oder ** return id ?? 0 **. Genau das gleiche :) –

+1

Das ist eine ziemlich langatmige Art zu sagen "ID 0" – Blorgbeard

+0

@Blogbeard: Technisch wäre es 'return id ?? 0; ':) –

6

Sie könnten die GetValueOrDefault() Funktion auf Nullable verwenden.

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

Beachten Sie, dass dies die coalescing answer by Richard77 ähnlich ist, aber ich würde sagen, etwas mehr lesbar ...

jedoch, ob diese Entscheidung ist eine gute Idee, bis zu Ihnen ist. So dass vielleicht eine Ausnahme angemessener ist?

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

return id.Value; 
+1

+1 für das Vorschlagen, dass das Werfen einer Ausnahme die passende Sache sein könnte zu tun. Es scheint mir, dass zu viele Programmierer sehr schnell einen Standardwert verwenden, ohne vorher sicherzustellen, dass null nicht wirklich ein Fehler ist. – Phong

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

dies den Wert von id, falls gibt es nicht null und 0 im anderen Fall ist.

+0

Was ist los mit 'return id ?? 0; ', was genau dasselbe macht und effizienter ist? –