C# - 如何将 Lazy<List<T>> 转换为 Lazy<List<U>>?
Posted
技术标签:
【中文标题】C# - 如何将 Lazy<List<T>> 转换为 Lazy<List<U>>?【英文标题】:C# - How to convert Lazy<List<T>> to Lazy<List<U>>? 【发布时间】:2011-07-02 03:59:20 【问题描述】:我有一个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。而且我需要转换一些变量。如果我将一件事转换为另一件事,它会加载所有内容,这将是不必要且缓慢的。
这是正确的方法吗?我还能如何做到这一点?
谢谢你的建议。
~
【问题讨论】:
【参考方案1】:您应该能够将Lazy<List<T>>
包装在Lazy<List<U>>
中。
var uLazy = new Lazy<List<U>>(() => tLazy.Value.Select(t => (U)t).ToList());
【讨论】:
【参考方案2】:或者使用某种扩展方法:
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())
;
);
我确信有一种更简洁的方法可以做到这一点。
【讨论】:
以上是关于C# - 如何将 Lazy<List<T>> 转换为 Lazy<List<U>>?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中将 List<DataRow> 转换为 List<T>?
如何将 C# List<string[]> 转换为 Javascript 数组?