2009-07-29 7 views
0

Ich fragte mich, ob jemand mit einer verkürzten Version für diesen Code kann kommen:C#: Kürzen-Code (Nullable Object, Return oder der String.Empty)

MyObject theObject = ObjectCollection.GrabAnObject(); 
if (theObject == null) return String.Empty; 
else return theObject.myProperty; 

Thank you!

+0

Haben Sie eine String.Empty wollen immer zurückgegeben werden? Sie müssten dann auch den Wert Ihrer Immobilie überprüfen. –

+0

Das zurückgegebene Objekt kommt tatsächlich von einem DB mit einem Constrain, der erfordert, dass der Wert nicht null ist, so dass ich die Überprüfung der Eigenschaft weglassen kann, die hier null ist oder nicht. Zumindest sind es jetzt 2 Zeilen anstatt 3 :) – Alex

Antwort

8
MyObject theObject = ObjectCollection.GrabAnObject(); 
return theObject == null ? String.Empty : theObject.myProperty; 
+0

Awwwwww, dang. ;) –

+0

Das war schnell x 9 – Alex

1

Verwenden Sie den ?: Betreiber:

MyObject theObject = ObjectCollection.GrabAnObject(); 
return (theObject == null) ? String.Empty : theObject.myProperty; 
2

Dieser Code ist in Ordnung, obwohl ich folgendes zur Verbesserung der Lesbarkeit (and I'm not the only one) würde empfehlen.

MyObject theObject = ObjectCollection.GrabAnObject(); 
if (theObject != null) 
    return theObject.myProperty; 

return string.Empty; 
1

Sicher, können Sie die verwenden? Operator.

MyObject theObject = ObjectCollection.GrabAnObject(); 
return (theObject == null) ? String.Empty : theObject.myProperty; 

Ich glaube nicht, dass Sie diese auf einer Linie bekommen können ObjectCollection.GrabAnObject ohne Aufruf() zweimal.

+0

wow, entschuldigung, 5 Leute posteten dies, als ich tippte! – derGral

+2

warum nicht? Löschen Sie einfach crlf vor der Rückkehr! ^^ –

+0

lol :) das war kein code golf :) – Alex

2
var theObject = ObjectCollection.GrabAnObject(); 
return theObject != null ? theObject.myProperty : String.Empty; 

// if you want an String.Empty always to be returned, also when the property is null 
return theObject != null ? theObject.myProperty ?? String.Empty : String.Empty; 
+0

Obwohl ich es in diesem Fall nicht brauche, werde ich das auch im Hinterkopf behalten. Guter Gedanke! – Alex

4

In C# 3.0 (Framework 3.5) können Sie schreiben:

return (ObjectCollection.GrabAnObject() ?? new MyObject(){ myProperty = ""}).myProperty; 

aber ich werde etwas besser lesbar wie schreiben:

Rückkehr neue MyObject (ObjectCollection.GrabAnObject())

und setzen Sie die Eigenschaft entsprechend im Konstruktor

EDIT: Mein Gedächtnis mache mir einen Witz: ?? ist kein c 3.0 Funktion #, aber eine 2,0 ein;)

MSDN link