如何为延迟加载对象赋值?

How to assign value to a Lazy Loading object?

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

当我想将 "Lazy loading list" 定义为我创建的普通列表时出现此错误:

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

代码如下:

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

我也尝试将我的列表识别为惰性列表,但这次我无法使用 "Add" 命令填充它:

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

'Lazy>' 不包含 'Add' 的定义并且没有扩展方法 'Add' 可以找到接受类型 'Lazy>' 的第一个参数(你是否缺少一个 using指令还是程序集引用?)

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

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

您可以分配给 Lazy<T>,将代码传递给它,以便在需要时延迟创建列表:

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

现在,当您需要列表时,您可以访问 currencyofMids.Value,如果尚未生成,它将生成它。