如何在循环中使用类型变量作为类型参数

本文关键字:类型变量 类型参数 循环 | 更新日期: 2023-09-27 18:17:57

我想这样做:

foreach(Type t in Aplicables)
{
    filename = Path.Combine(dataDir, t.Name + "s.txt");
    tempJson = JsonConvert.SerializeObject(DataRef<t>.DataList.ToArray());
    System.IO.File.WriteAllText(filename, tempJson);
}

但是我不能。

我知道这和编译有关。就像编译器需要在运行前被显式地告知要使用什么类型。这很好。但是我更喜欢在循环中这样做,而不是为"applications"的每个成员手动输入。

有办法吗?

public struct DataRef<T>
{
    public int RefNum;
    public static List<T> DataList = new List<T>();
    public T value
    {
        get
        {
            return DataList[RefNum];
        }
    }
}

如何在循环中使用类型变量作为类型参数

您需要这样做:

foreach (Type t in Aplicables)
{
    filename = Path.Combine(dataDir, t.Name + "s.txt");
    var prop = typeof(DataRef<>).MakeGenericType(t).GetProperty("DataList");
    var dataList = prop.GetValue(null) as //List<int> or whatever your dataList is;
    tempJson = JsonConvert.SerializeObject(dataList.ToArray());
    System.IO.File.WriteAllText(filename, tempJson);
}