我有一个Lazy<List<T>>
,其中T是一个类,它有一个巨大的字符串和有关文件的元数据。
我们称之为Property HugeString
和Property Metadata
我有这个类U,它具有相同的属性HugeString
等等。我必须将Lazy<List<T>>
转换为Lazy<List<U>>
而不加载所有内容。
有可能吗?
这是我创建列表的地方,在该方法中我获取有关文件和文件本身的信息:
entity.VersionedItems =
new Lazy<List<VersionedItemEntity>>(
() => VersionedItemEntity.GetFromTFSChanges(entity,chng.Changes));
这就是我想做的事(评论)
ChangesetList.Add(
new HistoryLogEntryModel()
{
Revision = changeset.Changeset.ToString(),
Author = changeset.User,
Date = changeset.Date.ToString("dd/MM/yyyy"),
Message = changeset.Comment,
//VersionedItems = changeset.VersionedItems
}
但是HistoryLogEntryModel具有不同版本的VersionedItems。我需要转换一些变量。如果我将一个东西转换成另一个东西,它会加载所有东西,这将是不必要的和缓慢的。
这是正确的做法吗?我怎么能实现这个目标呢?
谢谢你。
〜
答案 0 :(得分:4)
您应该能够将Lazy<List<T>>
打包在Lazy<List<U>>
。
var uLazy = new Lazy<List<U>>(() => tLazy.Value.Select(t => (U)t).ToList());
答案 1 :(得分:0)
或者使用某种扩展方法:
public static class ExtensionMethods
{
public static Lazy<U> Convert<T,U>(this Lazy<T> source, Func<Lazy<T>, Lazy<U>> convert)
{
return convert(source);
}
}
Lazy<List<int>> source = new Lazy<List<int>>();
Lazy<List<string>> converted = source.Convert(x =>
{
return new Lazy<List<string>>()
{
Items = x.Items.ConvertAll<string>(i => i.ToString())
};
});
我确信这样做有一个更整洁的方法。