【发布时间】:2016-04-04 14:22:09
【问题描述】:
在我的类构造函数中,我正在初始化许多 List[DropDownItem] 列表.....我不想再在构造函数中列出所有这些,我希望它们能够自动初始化。
我有以下内容,可以识别我需要定位的类型,但我还不能让它越过球门线。无法弄清楚如何执行“obj = new List(); 部分。
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 ...
}
【问题讨论】:
-
我看不到你提到的
obj = new List()部分... -
您需要将
UserEditModel传递给方法,或者在方法的开头写var userEditModel = new UserEditModel()。然后,你会写:p.SetValue(userEditModel, new List<DropdownItem>()); -
我根据您的评论进行了一些更改,但出现错误:对象与目标类型不匹配。我一定做错了什么。这有点超出我的深度。
-
为什么不给支持字段一个初始化器,为什么要使用反射代码,你以后必须仔细阅读才能看到它的作用?
-
Lasse,我不明白你的意思。
标签: c# class types constructor