[英]Get values from a HashSet<T> using reflection
I need a way to get the values from a generic HashSet using reflection . 我需要一种使用反射从通用HashSet获取值的方法。 Here is what I've tried (you can copy/paste this on a console app): 这是我尝试过的方法(您可以在控制台应用程序上复制/粘贴此内容):
class Program
{
public class Order
{
public int Id { get; set; }
}
public class Person
{
public string Name { get; set; }
public ICollection<Order> Orders { get; set; }
}
static void Main(string[] args)
{
var person = new Person();
person.Name = "Test Person";
person.Orders = new HashSet<Order>();
person.Orders.Add(new Order() { Id = 1 });
person.Orders.Add(new Order() { Id = 2 });
var reflectedOrders = person.GetType().GetProperty("Orders").GetValue(person, null);
Console.WriteLine("How do I iterate the reflected orders?");
Console.ReadLine();
}
}
It's an example, in the real application I don't know which type to convert the reflected Orders. 这是一个示例,在实际的应用程序中,我不知道哪种类型可以转换反映的订单。 I only know the property is an ICollection<T>
(turned to HashShet by EF) 我只知道该属性是ICollection<T>
(由EF转换为HashShet)
您是否尝试过将reflectedOrders
强制转换为IEnumerable
?
IEnumerable reflectedOrders = (IEnumerable)person.GetType().GetProperty("Orders").GetValue(person, null);
It should be simple as casting: 它应该像铸造一样简单:
var reflectedOrders = (HashSet<Order>) person.GetType().GetProperty("Orders").GetValue(person, null);
foreach (var order in reflectedOrders)
...
关于什么
var orders = persons.OfType<Person>().SelectMany(p => p.Orders);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.