为什么要使用Lazy <t>作为枚举?</t>

时间:2014-10-21 06:42:54

标签: c# .net-4.0

我看到了这样的代码:

readonly Lazy<SomeEnum> _somevar;

使用Lazy优于枚举的优势是什么? Enum本身很小。

2 个答案:

答案 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而不仅仅创建没有它的对象的优势。