簡體   English   中英

在運行時創建通用列表

[英]Generic List created at runtime

我在C#中需要這樣的東西..在類中有列表,但決定在運行時將在列表中

class A
{
    List<?> data;
    Type typeOfDataInList;
}

public void FillData<DataTyp>(DataTyp[] data) where DataTyp : struct
{
    A a = new A();
    A.vListuBudouDataTypu = typeof(DataTyp);
    A.data = new List<A.typeOfDataInList>();
    A.AddRange(data); 
}

這可能做這樣的事情嗎?

class A<T>
{
    public readonly List<T> Data = new List<T>();
    public Type TypeOfDataInList { get; private set; }

    public A()
    {
        TypeOfDataInList = typeof(T);
    }

    public void Fill(params T[] items)
    {
        data.AddRange(items);
    }
}

如果您不知道類型或具有多個不同類型的對象,請聲明A的實例,如下所示:

A<object> myClass = new A<object>();
myClass.Fill(new object(), new object());

否則,如果您知道類型,則可以執行以下操作:

A<int> myInts = new A<int>();
myInts.Fill(1, 2, 5, 7);

是。

class A
{
    IList data;
    Type typeOfDataInList;
}

public void FillData<T>(T[] data) where T : struct
{    
    A a = new A();
    A.typeOfDataInList = typeof(T);
    A.data = new List<T>(data);
}

最好使A類通用:

class A<T>
{
    IList<T> data;
    Type typeOfDataInList;
}

public void FillData<T>(T[] data) where T : struct
{    
    A<T> a = new A<T>();
    a.typeOfDataInList = typeof(T);
    a.data = new List<T>(data);
}

您將需要使用反射實例化一個IList < T > ,其中T直到運行時才知道。

請參閱下面的MSDN文章,該文章比我能更好地解釋它(向下滾動到有關如何構造泛型類型的部分): http : //msdn.microsoft.com/zh-cn/library/b8ytshk6.aspx

這是一個簡短的示例:

        Type listType = typeof(List<>);
        Type runtimeType = typeof(string); // just for this example
        // assert that runtTimeType is something you're expecting
        Type[] typeArgs = { runtimeType };
        Type listTypeGenericRuntime = listType.MakeGenericType(typeArgs);
        IEnumerable o = Activator.CreateInstance(listTypeGenericRuntime) as IEnumerable;
        // loop through o, etc..

您可能要考慮一個通用類:

public class A<T> where T : struct
{
    public List<T> data;
    public Type type;
}

public void FillData<DataType>(DataType[] data) where DataType : struct
{
    A<DataType> a = new A<DataType>();
    a.data = new List<DataType>();
    a.AddRange(data);
}

System.Collections.Generic.List<T>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM