Bor*_*ris 10 c# arrays reflection propertyinfo setvalue
有没有办法通过c#中的反射在数组属性中设置单个值?
我的属性定义如下:
double[] Thresholds { get; set; }
Run Code Online (Sandbox Code Playgroud)
对于"普通"属性,我使用此代码通过反射设置它:
PropertyInfo pi = myObject.GetType().GetProperty(nameOfPropertyToSet);
pi.SetValue(myObject, Convert.ChangeType(valueToSet, pi.PropertyType), null);
Run Code Online (Sandbox Code Playgroud)
我如何更改此代码以将数组属性中的值设置在任意位置?谢谢!
顺便说一句:我试图使用索引参数,但这似乎只适用于索引属性,而不是数组属性...
Mar*_*ell 16
当你这样做时:
obj.Thresholds[i] = value;
Run Code Online (Sandbox Code Playgroud)
这在语义上等同于:
double[] tmp = obj.Thresholds;
tmp[i] = value;
Run Code Online (Sandbox Code Playgroud)
这意味着你不希望SetValue 在所有 ; 相反,你想用来GetValue获取数组,然后改变数组.如果已知类型double[],则:
double[] arr = (double[]) pi.GetValue(myObject, null);
arr[i] = value;
Run Code Online (Sandbox Code Playgroud)
否则可能是非通用的IList方法(因为数组实现IList):
IList arr = (IList) pi.GetValue(myObject, null);
arr[i] = value;
Run Code Online (Sandbox Code Playgroud)
如果它是一个多维数组,你将不得不用它Array来代替IList.
您实际上并没有设置属性,只是更改属性值:
object value = myObject.GetType().GetProperty(nameOfPropertyToset).GetValue(myObject, null);
if (value is Array)
{
Array arr = (Array)value;
arr.SetValue(myValue, myIndex);
}
else
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14507 次 |
| 最近记录: |