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

C# 如何从类构造函数动态初始化项?,c#,class,types,constructor,C#,Class,Types,Constructor,在我的类构造函数中,我正在初始化许多列表[DropDownItem]列表。。。。。我不想再在构造器中列出它们,我想让它们自动神奇地初始化 我有以下内容,可以确定我需要瞄准的类型,但我还不能让它越过目标线。无法理解如何执行“obj=new List();部分” private void initializedRopDownItemList(类型T) { var props=typeof(UserEditModel).GetProperties(); foreach(道具中的var p) { 变量类

在我的类构造函数中,我正在初始化许多列表[DropDownItem]列表。。。。。我不想再在构造器中列出它们,我想让它们自动神奇地初始化

我有以下内容,可以确定我需要瞄准的类型,但我还不能让它越过目标线。无法理解如何执行“obj=new List();部分”

private void initializedRopDownItemList(类型T)
{
var props=typeof(UserEditModel).GetProperties();
foreach(道具中的var p)
{
变量类型=p.PropertyType;
if(type.IsGenericType&&type.GetGenericTypeDefinition()==typeof(列表))
{
var itemType=type.GetGenericArguments()[0];
if(itemType==typeof(DropdownItem))
{
p、 设置值(T,新列表());
}
}
}
}
公共类UserEditModel
{
公共UserEditModel()
{
selectedUser=newuserbusinessmodel();
currentUser=新用户业务模型();
//我想换这个
ddl1=新列表();
ddl2=新列表();
ddl3=新列表();
ddl4=新列表();
ddl5=新列表();
ddl6=新列表();
ddl7=新列表();
ddl8=新列表();
ddl9=新列表();
ddl10=新列表();
//用这个
this.initializedRopDownItemList();
//或者更好的是,…传递类类型,这样任何类似的类都可以使用它
initializeDropdownItemLists(typeof(UserEditModel));
}
公共用户BusinessModel currentUser{get;set;}
public UserBusinessModel selectedUser{get;set;}
//为简洁起见,省略了其他属性。。。
}

使用以下代码:

p.SetValue(someUserEditModelObject, new List<DropdownItem>());
p.SetValue(someUserEditModelObject,new List());
其中someUserEditModelObject是传递给InitializedRopDownItemList方法的对象

编辑: 通用助手的代码:

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

            }
        }
    }
公共类助手
{
public void initializedRopDownItemList(T模型)
{
var props=typeof(T).GetProperties();
foreach(道具中的var p)
{
变量类型=p.PropertyType;
if(type.IsGenericType&&type.GetGenericTypeDefinition()==typeof(列表))
{
var itemType=type.GetGenericArguments()[0];
if(itemType==typeof(DropdownItem))
{
p、 设置值(模型,新列表());
}
}
}
}
}

我看不到您提到的
obj=new List()
部分…您需要传递方法a
UserEditModel
,或者在方法的开头写入
var UserEditModel=new UserEditModel()
。然后,您需要写入:
p.SetValue(UserEditModel,new List());
我根据您的评论做了一些更改,但出现了错误:对象与目标类型不匹配。我一定是做错了什么。这有点超出我的理解范围。为什么不给支持字段一个初始值设定项,为什么要使用反射代码,稍后您必须仔细阅读才能看到它的作用?Lasse,我不明白您的意思。您知道吗uldn't pass to initialized method typeof(UserEditModel)pass“this”:
someHelper.initializeDropdownItemLists(this);
并将private void initializeDropdownItemLists(Type t)更改为
private void initializeDropdownItemLists(UserEditModel t)
另一种情况是使其成为泛型,然后必须按如下方式声明方法:
私有void initializedRopDownItemList(T model)
并将p.SetValue(T,new List());更改为
p.SetValue(model,new List());
    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>());
                    }
                }

            }
        }
    }