2009-07-29 2 views
0

Интересно, если кто-нибудь может прийти с укороченной версией для этого кода:C#: укоротить код (Nullable объекта, возврате имущества или String.Empty)

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

Спасибо!

+0

Вы хотите, String.Empty быть возвращен всегда? Тогда вам также нужно будет проверить ценность вашего имущества. –

+0

Возвращаемый объект на самом деле поступает из БД с ограничением, требующим, чтобы значение не было равным нулю, поэтому я могу опустить проверку свойства, которое является нулевым или нет здесь. По крайней мере, теперь это 2 линии вместо 3 :) – Alex

ответ

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

Awwwwww, dang. ;) –

+0

Это было быстро x 9 – Alex

1

Используйте ?: оператор:

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

Этот код прекрасно, хотя я бы рекомендовал следующее улучшить читаемость (and I'm not the only one).

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

return string.Empty; 
1

Уверен, вы можете использовать? оператор.

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

Я не верю, что вы можете получить это в одной строке без вызова ObjectCollection.GrabAnObject() дважды.

+0

ничего себе, извините, 5 человек разместили это, когда я печатал! – derGral

+2

Почему нет? просто удалите crlf перед возвратом! ^^ –

+0

lol :) Это был не код 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

Хотя я не нуждаюсь в этом в этом случае, я тоже буду помнить об этом. Хорошая мысль! – Alex

4

В C# 3.0 (рамочный 3,5) можно написать:

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

, но я буду писать что-то более удобным для чтения, как:

возвращения нового MyObject (ObjectCollection.GrabAnObject())

и назначьте изделие согласным в конструкторе

EDIT: Моя память делает мне анекдот: ?? не C# 3.0 функция, но 2,0 один;)

MSDN link

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