从另一个IEnumerable中填充任意具体IEnumerable

问题描述 投票:1回答:1

我正在写一些反射代码。呃,好吧。


我有一个IEnumerable<TData>值对象,和一个Expression<Func<TInstance, IEnumerable<TData>>>,代表一个其类型实现(但不是declared as)IEnumerable<TData>的属性。

例如我有一个属性声明为:public SomeProp List<String> {get;set;},值对象new[] {"a", "bee", "sea"}和表达式obj => obj.SomeProp

我已经成功编写了提取信息的代码:

IEnumerable<>SomeProp的具体实现是List<>

因此,我可以在values.ToList()值对象上调用IEnumerable<string>并将结果成功分配给属性。

对于IEnumerable<>的任何特定实现,我可以手动编写代码以检测该实现,并创建一个满足要求的具体对象。确实,我目前有一个小的映射字典,它涵盖了一些情况:

new Dictionary<Type, Func<IEnumerable<TProp>, IEnumerable<TProp>>>
{
    { typeof(List<>), (vals) => vals.ToList() },
    { typeof(IList<>), (vals) => vals.ToList() },
    { typeof(Collection<>), (vals) => new Collection<TProp>(vals.ToList()) },
    { typeof(ICollection<>), (vals) => new Collection<TProp>(vals.ToList()) },
};

自然,这甚至不包括大多数common案例,更不用说涵盖所有可能的案例了!


有什么方法可以编写将采用任意“值” IEnumerable<T>和目标具体对象IEnumerable<T>,并根据这些值创建具体实例的反射代码?

似乎有点乐观,但我认为值得一问:)

c# reflection ienumerable
1个回答
0
投票

TL; DR:

© www.soinside.com 2019 - 2024. All rights reserved.