在我的类构造函数中,我正在初始化许多List [DropDownItem]列表.....我不想再在构造函数中列出所有这些列表,我希望它们能够自动地进行初始化。
我有以下内容,可以识别我需要定位的类型,但我无法通过目标线获得它。无法弄清楚如何做“obj = new List(); part。
private void initializeDropdownItemLists(Type T)
{
var props = typeof(UserEditModel).GetProperties();
foreach (var p in props)
{
var type = p.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>))
{
var itemType = type.GetGenericArguments()[0];
if (itemType == typeof(DropdownItem))
{
p.SetValue(T, new List<DropdownItem>());
}
}
}
}
public class UserEditModel
{
public UserEditModel()
{
selectedUser = new UserBusinessModel();
currentUser = new UserBusinessModel();
// I want to replace this
ddl1 = new List<DropdownItem>();
ddl2 = new List<DropdownItem>();
ddl3 = new List<DropdownItem>();
ddl4 = new List<DropdownItem>();
ddl5 = new List<DropdownItem>();
ddl6 = new List<DropdownItem>();
ddl7 = new List<DropdownItem>();
ddl8 = new List<DropdownItem>();
ddl9 = new List<DropdownItem>();
ddl10 = new List<DropdownItem>();
// with this
this.initializeDropdownItemLists();
// or better yet this, ..... pass the class type so then any similar class can use it
someHelper.initializeDropdownItemLists(typeof(UserEditModel));
}
public UserBusinessModel currentUser { get; set; }
public UserBusinessModel selectedUser { get; set; }
// other properties omitted for brevity ...
}
答案 0 :(得分:1)
使用以下代码:
p.SetValue(someUserEditModelObject, new List<DropdownItem>());
其中someUserEditModelObject是传递给initializeDropdownItemLists方法的对象。
编辑: 通用助手代码:
public class Helper
{
public void InitializeDropdownItemLists<T>(T model)
{
var props = typeof (T).GetProperties();
foreach (var p in props)
{
var type = p.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof (List<>))
{
var itemType = type.GetGenericArguments()[0];
if (itemType == typeof (DropdownItem))
{
p.SetValue(model, new List<DropdownItem>());
}
}
}
}
}