Я видел такой код:Зачем использовать Lazy <T> для перечисления?
readonly Lazy<SomeEnum> _somevar;
В чем преимущество использования Lazy
над перечислением? Само перечисление мало.
Я видел такой код:Зачем использовать Lazy <T> для перечисления?
readonly Lazy<SomeEnum> _somevar;
В чем преимущество использования Lazy
над перечислением? Само перечисление мало.
Как там, кажется, некоторое замешательство, почему это может быть хорошей идеей, вот версия делает то же самое без Lazy
:
private SomeEnum? _value = null;
private SomeEnum CostyCalculation()
{
return ...;
}
public SomeEnum MyVar
{
get
{
if (_value == null)
_value = CostyCalculation();
return _value.Value;
}
}
Как вы можете видеть, значение вычисляется только при первом нужно и как только у вас есть это, вам не нужно снова пересчитывать его.
Lazy
делает то же самое с небольшим различного синтаксиса/использования:
private Lazy<SomeEnum> _value = new Lazy<SomeEnum>(CostyCalculation);
private SomeEnum CostyCalculation()
{
return SomeEnum.E1;
}
public SomeEnum MyVar
{
get
{
return _value.Value;
}
}
Ленивый полезен в ситуациях, когда вам нужно прямо сейчас объявить о создании какого-либо объекта, который будет потреблять довольно много времени и/или ресурсов во время инициализации, и вы уверены, что в большинстве ситуаций вам не нужна его во время выполнения программы.
Например, у вас есть объект, который во время создания загружает некоторые веб-страницы, анализирует его, загружает каждую подстраницу, анализирует ее и затем сохраняет некоторые статистические данные в себя. Это займет довольно много времени. Но вы хотите объявить объект сейчас, и, может быть, только, может быть, использовать его последним. Вы можете обернуть его в Lazy<T>
, так что этот объект, возможно, может быть, может быть, будет инициализирован последним - когда вы сделаете первый доступ к нему.
Это только преимущество использования Lazy только для создания объекта без него.
В каком контексте вы видели, что это выгодно? – thumbmunkeys
Может быть, небольшой, но дорогой расчет? – Thilo
@thumbmunkeys: Когда объект большой. – Ajay