Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# 通过keys.NETCore获取对象的属性并放入不同的对象中_C#_Asp.net Core_.net Core - Fatal编程技术网

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)
看起来非常错误。