C# 泛型列表作为构造函数参数

本文关键字:构造函数 参数 泛型 列表 | 更新日期: 2024-11-06 21:10:48

我正在尝试向类的构造函数提供一个我不知道类型的列表。

首先,我有一个包含多个表和一个方法的类:

public class A{
private List<float> _List1;
private List<Proj> _List2;
...
    public void saveConfig(string path){
        ConfContainer confContainer = new ConfContainer ();
        Type type = this.GetType();
        PropertyInfo[] properties = type.GetProperties();
        confContainer.ConfEntries = new ConfEntry[properties.Length];
        int i = 0;
        foreach (PropertyInfo property in properties){
            if(property.GetValue(this,null) is IList && property.GetValue(this,null).GetType().IsGenericType){
                confContainer.ConfEntries [i] = new ConfEntryList (property.Name, property.GetValue(this, null));
            }
        }
     }
}

以及我试图实现的泛型类:

public class ConfEntryList<T>: ConfEntry{
    [XmlArray("Valeurs")]
    [XmlArrayItem("Valeur")]
    public List<T> Valeurs;
    public ConfEntryList(){
    }
    public ConfEntryList(string attribut, List<T> valeurs){
        this.Attribut = attribut;
        this.Valeur = null;
        this.Valeurs = valeurs;
    }   
}

问题是这一行:confContainer.ConfEntries [i] = new ConfEntryList (property.名称、属性。GetValue(this, null));

我不知道如何将 List 类型传递给构造函数:

new ConfEntryList<T>(...)

是否可以将类型 T(由 PropertyInformation 捕获的任何泛型列表)传递给泛型构造函数?

提前感谢您的任何帮助

C# 泛型列表作为构造函数参数

您需要

使用 Activator.CreateInstance

像这样的东西..

       if(property.GetValue(this,null) is IList 
            && property.GetValue(this,null).GetType().IsGenericType){
            var listType = property.PropertyType.GetGenericArguments()[0];
            var confType = typeof(ConfEntryList<>).MakeGenericType(listType);
            var item = (ConfEntry)Activator.CreateInstance(confType,
                  new object [] {property.Name, property.GetValue(this, null)});
            confContainer.ConfEntries [i] =  item;
       }