Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从哈希集获取值<;T>;使用反射_C#_Reflection_Hashset - Fatal编程技术网

C# 从哈希集获取值<;T>;使用反射

C# 从哈希集获取值<;T>;使用反射,c#,reflection,hashset,C#,Reflection,Hashset,我需要一种使用反射从通用哈希集获取值的方法。以下是我尝试过的内容(您可以在控制台应用程序上复制/粘贴此内容): 类程序 { 公共阶级秩序 { 公共int Id{get;set;} } 公共阶层人士 { 公共字符串名称{get;set;} 公共ICollection命令{get;set;} } 静态void Main(字符串[]参数) { var person=新的person(); person.Name=“测试人员”; person.Orders=newhashset(); 添加(新订单(){

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

类程序
{
公共阶级秩序
{
公共int Id{get;set;}
}
公共阶层人士
{
公共字符串名称{get;set;}
公共ICollection命令{get;set;}
}
静态void Main(字符串[]参数)
{
var person=新的person();
person.Name=“测试人员”;
person.Orders=newhashset();
添加(新订单(){Id=1});
添加(新订单(){Id=2});
var reflectedOrders=person.GetType().GetProperty(“订单”).GetValue(person,null);
WriteLine(“如何迭代反映的订单?”);
Console.ReadLine();
}
}

编辑
这是一个例子,在实际应用程序中,我不知道转换反射顺序的类型。我只知道属性是一个
I集合
(由EF转换为HashShet)

您是否尝试将
reflectedOrders
转换为
IEnumerable

IEnumerable reflectedOrders = (IEnumerable)person.GetType().GetProperty("Orders").GetValue(person, null);

它应该像铸造一样简单:

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

foreach (var order in reflectedOrders)
    ...
var reflectedOrders=(HashSet)person.GetType().GetProperty(“Orders”).GetValue(person,null);
foreach(反射顺序中的var顺序)
...
那怎么办

var orders = persons.OfType<Person>().SelectMany(p => p.Orders);
var orders=persons.OfType().SelectMany(p=>p.orders);

对不起,我要补充一个限制:我不知道那种类型(这个例子非常简单)@ChuckNorris,如果你不关心这种类型,那么就直接转换到
IEnumerable
.Hm,或者我完全误解了这个问题?jaja,是的,我需要使用反射,该示例非常基本,因此您可以直接在控制台中运行它进行测试。事实上,@Daniel和@gdoron回答得很对
IEnumerable
是我需要的强制转换。如果对象不是您期望的,您甚至可以直接将其强制转换为适当的类型,或者使用as关键字并检查空引用,而不是获取InvalidCastException
var orders = persons.OfType<Person>().SelectMany(p => p.Orders);