Передайте параметры конструктору при инициализации отложенного экземпляра - PullRequest
21 голосов
/ 11 декабря 2010
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);

У меня вопрос, как передать InstanceName в myClass конструктор, когда мы используем ленивый экземпляр?

Ответы [ 3 ]

28 голосов
/ 11 декабря 2010

Попробуйте:

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

Помните, что выражение вычисляется лениво, поэтому, если вы измените значение переменной InstanceName до вызова конструктора, оно может не выполнить то, что вы ожидаете.

7 голосов
/ 07 октября 2011

У Lazy есть два способа инициализации.Первый использует ctor по умолчанию (без параметров) T

, второй принимает Func, который имеет логику инициализации клиента.Вы должны использовать вторую перегрузку, как указано здесь

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

3 голосов
/ 11 декабря 2010

Вы не можете, Lazy<T> требуется конструктор без параметров.Однако вы можете использовать конструктор Lazy<T>(Func<T>) с методом, который инициализирует класс.

...