我看到了这样的代码:
readonly Lazy<SomeEnum> _somevar;
使用Lazy
优于枚举的优势是什么? Enum本身很小。
答案 0 :(得分:2)
由于似乎有些混淆,为什么这可能是一个好主意,这里有一个版本在没有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;
}
}
答案 1 :(得分:0)
当您需要立即声明创建某个对象时,Lazy非常有用,在初始化期间会耗费相当多的时间或/和资源,并且您确定在大多数情况下您不需要在程序执行期间需要它。
例如,你有一个对象,在创建过程中下载一些网页,解析它,下载每个子页面,解析它,然后将一些统计数据存储到自己。这将耗费相当多的时间..但是你现在想要声明对象,也许,只能使用后者。你可以把它包装成Lazy<T>
,所以这个对象可能只会在你第一次访问它时被初始化。
这只是使用Lazy而不仅仅创建没有它的对象的优势。