我是懒惰加载的新手,但我希望能够在创建它之后填充我的延迟加载对象。有可能吗?
当我想将“延迟加载列表”定义为我创建的普通列表时,我收到此错误:
无法隐式转换类型:'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;”类型的第一个参数可以找到(你错过了使用指令或程序集引用吗?)
答案 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
的列表时,如果它尚未生成,则会生成它。