C# - 如何将Lazy <List <T >>转换为Lazy <List <U >>?

Con*_*ark 5 c# lazy-loading list type-conversion

我有一个Lazy<List<T>>地方T是一个类,它有一个巨大的字符串和有关文件的元数据.我们称之为财产HugeString和财产Metadata

我有这个类U,它具有相同的属性HugeString,等等.我必须转换Lazy<List<T>>Lazy<List<U>>不加载所有东西.

可能吗 ?

这是我创建列表的地方,在该方法中我获取有关文件和文件本身的信息:

entity.VersionedItems =
    new Lazy<List<VersionedItemEntity>>(
        () => VersionedItemEntity.GetFromTFSChanges(entity,chng.Changes));
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的(评论)

ChangesetList.Add(
    new HistoryLogEntryModel()
    {
        Revision = changeset.Changeset.ToString(),
        Author = changeset.User,
        Date = changeset.Date.ToString("dd/MM/yyyy"),
        Message = changeset.Comment,
        //VersionedItems = changeset.VersionedItems
    }
Run Code Online (Sandbox Code Playgroud)

但是HistoryLogEntryModel具有不同版本的VersionedItems.而且我需要转换一些变量.如果我将一个东西转换成另一个东西,它会加载所有东西,这将是不必要的和缓慢的.

这是正确的方法吗?我怎么能做到这一点?

谢谢你.

Cha*_*ion 4

您应该能够将其包装Lazy<List<T>>Lazy<List<U>>.

var uLazy = new Lazy<List<U>>(() => tLazy.Value.Select(t => (U)t).ToList());
Run Code Online (Sandbox Code Playgroud)