如何使用lazy与实例变量

时间:2013-05-17 15:37:26

标签: c# .net visual-studio-2012 lazy-loading lazy-evaluation

鉴于以下代码

public class classA
{
   int someid ;
   public classA( int x ) { someid = x; }

   Lazy<myType> lazymt1 = new Lazy<myType>( 
       return MyStaticClassMethod.GetFor( someid );    // problem statement - how should this be coded ?
   );

  public myType GetMyType { return lazymt1.value ; }
}

如何传递变量someid并编码Func<myType>

更新 - 这是我到目前为止所做的和结果

Lazy<myType> lazymt1 = new Lazy<myType>( () =>  MyStaticClassMethod.GetFor( someid ) );

以上行不编译,红色波浪线表示

  

无法将lambda表达式转换为LazyThreadSafetyMode,因为它不是委托类型

1 个答案:

答案 0 :(得分:3)

最简单的可能是通过lambda:

Lazy<myType> lazymt1 = new Lazy<myType>( 
       () => MyStaticClassMethod.GetFor( someid )
   );

您还需要在构造函数中初始化Lazy对象以访问隐式对象引用:

private Lazy<myType> lazymt1;

public classA()
{
    lazymt1 = new Lazy<myType>(() => MyStaticClassMethod.GetFor(someid));
}