如何从类构造函数动态初始化项



在我的类构造函数中,我正在初始化许多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 ...
}

使用以下代码:

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>());
                    }
                }
            }
        }
    }

最新更新