如何从变量名访问属性的子属性

本文关键字:属性 访问 变量名 | 更新日期: 2023-09-27 18:36:00

我想修改模型中列表的属性。因为有很多这样的列表,所以我使用反射 GetType()。GetProperty(propertyName) 按如下方式执行此操作,

public class SalesViewModel
{
public List<SelectListItem> SourceTypes0 { get; set; }
...
public List<SelectListItem> SourceTypes9 { get; set; }
}
SalesViewModel model = new SalesViewModel();
model.SourceTypes0 = from r in this._repository.SourceTypes
                    select new SelectListItem
                    {
                        Text = r.Name,
                        Value = SqlFunctions.StringConvert((double)r.SourceTypeID)
                    }).OrderBy(c => c.Text).ToList();
...
model.SourceTypes9 = from r in this._repository.SourceTypes
                    select new SelectListItem
                    {
                        Text = r.Name,
                        Value = SqlFunctions.StringConvert((double)r.SourceTypeID)
                    }).OrderBy(c => c.Text).ToList();
for (int i = 0; i < 10; i++)
{
string propertyName = "SourceTypes" + i.ToString();
var propInfo = model.GetType().GetProperty(propertyName);
if (propInfo != null)
{
propInfo.SetValue(model, "...", null);
}
}

如果我想修改模型。源类型0[1]。选择字段,问题是如何将 propInfo 转换为列表或访问 SourceTypes0[1]。选择。我尝试

List<SelectListItem> propInfo = (List<SelectListItem>)model.GetType().GetProperty(propertyName);

但它给出的错误为

Cannot convert System.Reflection.PropInfo to System.Collections.Generic.List<System.Web.Mvc.SelectListItem>

我需要这方面的帮助。谢谢。

如何从变量名访问属性的子属性

该方法GetProperty()返回一个PropertyInfo。如果要获取该属性的值,则需要调用其GetValue()方法:

var propInfo = model.GetType().GetProperty(propertyName);
var theList = (List<SelectListItem>)propInfo.GetValue(model);