C#-如何转换懒惰<;列表<;T>&燃气轮机;懒惰<;列表<;U>>;?

C#-如何转换懒惰<;列表<;T>&燃气轮机;懒惰<;列表<;U>>;?,c#,list,lazy-loading,type-conversion,C#,List,Lazy Loading,Type Conversion,我有一个Lazy,其中T是一个类,它有一个巨大的字符串和关于文件的元数据。 让我们称它们为PropertyHugeString和PropertyMetadata 我有一个U类,它的属性与其他属性相同。我必须将Lazy转换为Lazy,而不必加载所有内容 可能吗 这是我创建列表的地方,在该方法中,我获得有关文件和文件本身的信息: entity.VersionedItems = new Lazy<List<VersionedItemEntity>>( (

我有一个
Lazy
,其中T是一个类,它有一个巨大的字符串和关于文件的元数据。 让我们称它们为Property
HugeString
和Property
Metadata

我有一个U类,它的属性与其他属性相同。我必须将
Lazy
转换为
Lazy
,而不必加载所有内容

可能吗

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

entity.VersionedItems =
    new Lazy<List<VersionedItemEntity>>(
        () => VersionedItemEntity.GetFromTFSChanges(entity,chng.Changes));
但是HistoryLogEntryModel有不同版本的VersionedItems。我需要转换一些变量。如果我将一件事转换成另一件事,它会加载所有的东西,这将是不必要的和缓慢的

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

谢谢你


~

您应该能够将
惰性
包装在
惰性

var-uLazy=newlazy(()=>tLazy.Value.Select(t=>(U)t.ToList());

或使用某种扩展方法:

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())
            };
});
公共静态类扩展方法
{
公共静态惰性转换(此惰性源,Func Convert)
{
返回转换(源);
}
}
Lazy source=新的Lazy();
Lazy converted=source.Convert(x=>
{ 
返回新的Lazy()
{
Items=x.Items.ConvertAll(i=>i.ToString())
};
});
我相信有一个更整洁的方法可以做到这一点

var uLazy = new Lazy<List<U>>(() => tLazy.Value.Select(t => (U)t).ToList());
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())
            };
});