web-dev-qa-db-ja.com

レイジーインスタンスを初期化するときに、パラメーターをコンストラクターに渡します

public class myClass
{
   public myClass(String InstanceName)
   {
      Name = InstanceName;
   }
   public String Name { get; set; }
}

// Now using myClass lazily I have:

Lazy<myClass> myLazy;
Console.WriteLine(myLazy.Value.Name);

私の質問は、レイジーインスタンスを使用しているときにInstanceNamemyClassコンストラクターに渡す方法です。

25
Xaqron

これを試して:

Lazy<myClass> myLazy = new Lazy<myClass>(() => new myClass(InstanceName));

式は遅延評価されるため、コンストラクターが呼び出される前に変数InstanceNameの値を変更すると、期待どおりに動作しない可能性があることに注意してください。

32
Mark Byers

Lazyには、初期化する2つの方法があります。 1つ目は、Tのデフォルトのctor(パラメーターなし)を使用することです。

2つ目は、顧客初期化ロジックを持つFuncを受け入れることです。ここで説明したように、2番目のオーバーロードを使用する必要があります

http://msdn.Microsoft.com/en-us/library/dd642329.aspx

できません。_Lazy<T>_にはパラメーターのないコンストラクターが必要です。ただし、クラスを初期化するメソッドを使用して、Lazy<T>(Func<T>)コンストラクターを使用することもできます。

3
Femaref