如何为Lazy Loading对象赋值?

时间:2016-06-28 16:01:09

标签: c# asp.net lazy-loading lazy-initialization

我是懒惰加载的新手,但我希望能够在创建它之后填充我的延迟加载对象。有可能吗?

当我想将“延迟加载列表”定义为我创建的普通列表时,我收到此错误:

无法隐式转换类型:'System.Collections.Generic.List'为'System.Lazy>'

以下是代码:

List<Currency> currencyOfMids = new List<Currency>();
 obj.Merchant.CurrencyOfMids = currencyOfMids;

我也尝试将我的列表识别为Lazy列表,但这次我无法用“添加”命令填充它:

 foreach (ListItem currencyItem in selectedCurrencies)
                currencyOfMids.Add(new Currency() { Code = currencyItem.Text, Id = int.Parse(currencyItem.Value) });

'懒惰&GT;'不包含“添加”的定义,也没有扩展方法“添加”接受“Lazy&gt;”类型的第一个参数可以找到(你错过了使用指令或程序集引用吗?)

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找Lazy<T>.Value属性。 Value属性是您访问T对象的方式(在您的情况下,是List<Currency>。值在您第一次访问时自动初始化(这使得它变得懒惰)。您无法分配值,但您可以遍历currencyOfMids并将每个值添加到obj.Merchant.CurrencyOfMids.Value

foreach (ListItem currencyItem in selectedCurrencies)
            currencyOfMids.Value.Add(new Currency() { Code = currencyItem.Text, Id = int.Parse(currencyItem.Value) });

答案 1 :(得分:1)

您可以分配给Lazy<T>,并在需要时向其传递将懒惰地创建列表的代码:

obj.Merchant.currencyOfMids = new Lazy<List<Currency>>(
   () => ... code to generate currencies ...
);

现在,当您需要访问currencyofMids.Value的列表时,如果它尚未生成,则会生成它。