Другой способ - проверить саму переменную в условии *ngIf
, прежде чем переходить к какому-либо свойству:
<span *ngIf="selectedrecipe">
<img src="{{selectedrecipe.imagepath}}" alt="{{selectedrecipe.name}}" class="img-responsive" style="max-height:300px">
</span>
Ну, у меня есть статья о том, что касательно / делают - но она не обсуждает, необходимо ли использовать их.
В основном out
параметры обычно являются знаком, что Вы хотите эффективно возвратить два результата метода. Это обычно - запах кода - но существуют некоторые случаи (прежде всего с шаблоном TryXXX), где Вы действительно хотите возвратить два сведения на серьезных основаниях, и не имеет большого смысла инкапсулировать их вместе.
Другими словами, избегайте/касательно, где Вы можете сделать так легко, но не идете в широком масштабе из Вашего способа избежать их.
В отсутствие кортежей они иногда - самый чистый способ сделать вещи. Я обычно ненавижу их, все же.
F# имеет немного хорошего синтаксического сахара для контакта с ними. Вместо того, чтобы заставлять меня иметь дело с out
параметры, это рассматривает их как методы тот возврат кортежи вместо этого. Различное TryParse
методы заканчивают тем, что возвратили два кортежа элемента:
let success, value = Int32.TryParse("1234")
(* success is true *)
(* value is 1234 *)
Это довольно удобно, и не заставляет меня чувствовать себя грязным.
Для большинства обстоятельств я рекомендовал бы против использования параметров. Они в основном добавляют побочные эффекты к Вашему коду и могли быть кошмаром когда дело доходит до отладки.
Существует статья о MSDN относительно параметров, доступных здесь: http://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx
Я думаю, что они действительно полезны при необходимости.
Статья Msdn и для касательно и для параметры.
Хороший вопрос. Мой ответ - то, что мне особенно не нравятся они, но я действительно использую их в одном из моих проектов, где несколько возвращаемых значений распространены. У меня есть библиотека финансовых данных, которая возвращает фактическую цену (или пустой указатель/нуль), главный код ошибки и незначительный код ошибки. Библиотека имеет десятки к сотням методов, и каждый код ошибки является другим типом, таким образом создавание пользовательских классов для каждого и возврат экземпляра этого были бы очень громоздкими.
Параметры полезны, когда необходимо возвратить больше чем один объект в результате функции. К моим глазам,
void doSomeThing(Thing toDoItTo,
out OtherThing result1,
out AnotherThing result2)
{
...
}
OtherThing y;
AnotherThing z;
doSomeThing(x, out y, out z);
y.method1();
z.method2();
является намного более чистым, чем
struct DoSomeThingResults
{
public OtherThing Result1;
public OtherThing Result2;
}
DoSomeThingResults doSomeThing(Thing toDoItTo)
{
...
}
DoSomethingResults results = doSomeThing(x);
results.Result1.method1();
results.Result2.method2();
и дополнительно, использование параметры означают, что результаты, как гарантируют, будут присвоены.
FxCop не думает, что это - хорошая идея...
http://msdn.microsoft.com/en-us/library/ms182146 (По сравнению с 80) .aspx