【问题标题】:How to assign value to a Lazy Loading object?如何为延迟加载对象赋值?
【发布时间】:2016-06-28 16:01:09
【问题描述】:

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

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

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

代码如下:

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

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

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

“Lazy>”不包含“Add”的定义,并且找不到接受“Lazy>”类型的第一个参数的扩展方法“Add”(您是否缺少 using 指令或程序集引用?)

【问题讨论】:

  • 建议你去看看一些例子。你的代码应该在某处有一个Lazy&lt;List&lt;Currency&gt;&gt; 声明。
  • 是的,它有该声明,我想保留它。只是想知道是否可以为延迟加载对象赋值?
  • 是 obj.Merchant.CurrencyOfMids 类型的 Lazy> 并且您正在尝试分配给它?
  • @DevNoob 没错,是的。有可能吗?
  • 不完全是。请看下面我的回答。希望这就是你要找的东西!

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


【解决方案1】:

我认为您正在寻找 Lazy&lt;T&gt;.Value 属性。 Value 属性是您访问 T 对象的方式(在您的情况下,是List&lt;Currency&gt;。第一次访问它时,Value 会自动初始化(这就是它变得懒惰的原因)。您不能分配给 value,但是您可以遍历currencyOfMids 并将每个值添加到obj.Merchant.CurrencyOfMids.Value

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

【讨论】:

  • 你说得对,这看起来像解决方案,让我有机会试试。
  • 懒惰地分配List&lt;Currency&gt; 然后像这样“手动”完成它是没有意义的。最好有一个空的List&lt;Currency&gt;,而不是在第一次访问时生成一个空列表的Lazy&lt;List&lt;Currency&gt;&gt;。 @NecatiHakanErdogan
【解决方案2】:

您可以分配给Lazy&lt;T&gt;,将代码传递给它,以便在需要时懒惰地创建列表:

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

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

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2020-06-13
    • 1970-01-01
    • 2012-10-06
    相关资源
    最近更新 更多