如何在循环中使用类型变量作为类型参数?
How to use a Type variable as a Type Parameter in a loop?
我想这样做:
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);
}
但是我不能。
我理解是跟编译有关。就像需要在 运行 时间之前明确告诉编译器将使用什么类型一样。没关系。但我更愿意在循环中执行此操作,而不必为 "Aplicables".
的每个成员手动输入
有办法吗?
顺便说一句
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);
}
我想这样做:
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);
}
但是我不能。
我理解是跟编译有关。就像需要在 运行 时间之前明确告诉编译器将使用什么类型一样。没关系。但我更愿意在循环中执行此操作,而不必为 "Aplicables".
的每个成员手动输入有办法吗?
顺便说一句
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);
}