C# 通过keys.NETCore获取对象的属性并放入不同的对象中
我有空的C# 通过keys.NETCore获取对象的属性并放入不同的对象中,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我有空的var过滤器=新范围()具有以下属性的对象: public class Ranges { public double[] NumberOfCustomers { get; set; } public int[] NumberOfTransactions { get; set; } // ... more properties.... } 此对象中的每个属性都必须有两个值:通过sql查询获得的最小值和最大值。 因为我在一个查询中得到了所有的最小/最大值,所以
var过滤器=新范围()代码>具有以下属性的对象:
public class Ranges
{
public double[] NumberOfCustomers { get; set; }
public int[] NumberOfTransactions { get; set; }
// ... more properties....
}
此对象中的每个属性都必须有两个值:通过sql查询获得的最小值和最大值。
因为我在一个查询中得到了所有的最小/最大值,所以我将它们放在一个对象中,结果如下所示:
每个键有两个值,我想将它们添加到范围中的两个适当数组中
属性:
我就是这样尝试的:
var filters = new Ranges();
PropertyInfo[] properties = typeof(Ranges).GetProperties();
foreach (PropertyInfo property in properties)
{
var title = property.Name;
var a = rangeTask.Result; // IEnumerable<object>
PropertyInfo pi = a.GetType().GetProperty(title);
var value = pi.GetValue(a, null);
property.SetValue(filters, value); // property of Ranges
}
var过滤器=新范围();
PropertyInfo[]properties=typeof(Ranges).GetProperties();
foreach(属性中的PropertyInfo属性)
{
var title=property.Name;
var a=rangeTask.Result;//IEnumerable
PropertyInfo pi=a.GetType().GetProperty(标题);
var value=pi.GetValue(a,null);
SetValue(过滤器,值);//范围的属性
}
但是,我得到的值为null。我做错了什么?如何获得这些值?代码中几乎没有错误。假设屏幕截图上显示了rangeTask.Result
,您可以尝试执行以下操作:
var filters = new Ranges();
var a = new[] {KeyValuePair.Create("NumberOfCustomers", (object)0.0), KeyValuePair.Create("NumberOfCustomers", (object)100.0)}; // rangeTask.Result
PropertyInfo[] properties = typeof(Ranges).GetProperties();
foreach (PropertyInfo property in properties)
{
var title = property.Name;
// get values by title
var values = a.Where(kvp => kvp.Key == title)
.Select(kvp => kvp.Value)
.OrderBy(v => v)
.ToArray();
// convert object[] to property type array
var arr = Array.CreateInstance(property.PropertyType.GetElementType(), values.Length);
Array.Copy(values, arr, values.Length);
// assign array
property.SetValue(filters, arr); // property of Ranges
}
我认为pi.GetValue(pi,null)
应该是pi.GetValue(a,null)
如果a
是IEnumerable
我很惊讶在运行时它没有失败)。另外,pi.GetValue(pi,null)
看起来非常错误。