Is there a way to set a single value in an array property via reflection in c#?
My property is defined like this:
double[] Thresholds { get; set; }
For "normal" properties I use this code to set it via reflection:
PropertyInfo pi = myObject.GetType().GetProperty(nameOfPropertyToSet);
pi.SetValue(myObject, Convert.ChangeType(valueToSet, pi.PropertyType), null);
How would I have to change this code to set the value in an array property at an arbitrary position? Thanks!
BTW: I tried to use the index parameter, but that seems only to work for indexed properties, not properties that are arrays...
You are not actually setting the property, just changing the property value:
Te code here will work for on it, its design to fill a 10 position array, you can do it for any size array.
The function PopulateInstance populate a data structure with what I need.
When you do:
that is semantically equivalent to:
which means you don't want a
SetValue
at all; rather, you want to useGetValue
to obtain the array, and then mutate the array. If the type is known to bedouble[]
, then:otherwise perhaps the non-generic
IList
approach (since arrays implementIList
):If it is a multi-dimensional array, you'll have to use
Array
in place ofIList
.