简体   繁体   English

从HashSet获取值 <T> 使用反射

[英]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();
        }
    }

EDIT 编辑

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM