0

我需要一种使用反射从通用 HashSet 获取值的方法。这是我尝试过的(您可以在控制台应用程序上复制/粘贴它):

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

编辑

这是一个例子,在实际应用中我不知道要转换哪种类型的反射订单。我只知道该属性是一个ICollection<T>(由 EF 转为 HashShet)

4

3 回答 3

2

你试过铸造reflectedOrdersIEnumerable

IEnumerable reflectedOrders = (IEnumerable)person.GetType().GetProperty("Orders").GetValue(person, null);
于 2012-11-21T22:09:59.960 回答
0

它应该像铸造一样简单:

var reflectedOrders = (HashSet<Order>) person.GetType().GetProperty("Orders").GetValue(person, null);

foreach (var order in reflectedOrders)
    ...
于 2012-11-21T22:10:36.833 回答
0

关于什么

var orders = persons.OfType<Person>().SelectMany(p => p.Orders);
于 2012-11-21T22:21:11.073 回答