Когда вы делаете:
obj.Thresholds[i] = value;
, что семантически эквивалентно:
double[] tmp = obj.Thresholds;
tmp[i] = value;
, что означает, что вы вообще не хотите SetValue
;скорее, вы хотите использовать GetValue
для получения массива, а затем мутировать массив.Если известно, что типом является double[]
, то:
double[] arr = (double[]) pi.GetValue(myObject, null);
arr[i] = value;
в противном случае возможно неуниверсальный подход IList
(поскольку массивы реализуют IList
):
IList arr = (IList) pi.GetValue(myObject, null);
arr[i] = value;
Если это многомерный массив, вам придется использовать Array
вместо IList
.