max*_*axp 5 c# lazy-loading lazy-evaluation
我正在收集一些Lazy物品.然后我想要一次性强行"创造"它们.
void Test(IEnumerable<Lazy<MailMessage>> items){
}
Run Code Online (Sandbox Code Playgroud)
通常使用Lazy项目,只有访问其中一个成员,才会创建包含的对象.
看到没有ForceCreate()方法(或类似),我被迫做以下事情:
var createdItems = items.Where(a => a.Value != null && a.Value.ToString() != null).Select(a => a.Value);
Run Code Online (Sandbox Code Playgroud)
这是使用ToString()给力创建的每个项目.
有没有更简洁的方法来强行创建所有项目?
要获取所有延迟初始化值的列表:
var created = items.Select(c => c.Value).ToList();
Run Code Online (Sandbox Code Playgroud)
您需要两件事来创建所有惰性项目,您需要枚举所有项目(但不一定保留它们),并且您需要使用属性Value来创建项目。
items.All(x => x.Value != null);
Run Code Online (Sandbox Code Playgroud)
该All方法需要查看所有值来确定结果,因此这将导致枚举所有项目(无论集合的实际类型是什么),并且Value在每个项目上使用属性将导致它创建其对象。(这!= null部分只是为了设置一个该All方法适合的值。)
| 归档时间: |
|
| 查看次数: |
2188 次 |
| 最近记录: |