例如inst1是某个类实例。我事先并不知道inst1的类型,我先这样
Type t = inst1.GeType
这样t就存储了inst1的类型
现在我要创建一个该类型的对象数组,这个可以实现吗?
利用反射应该可以实现,参考如下
Type t = inst1.GeType();
Assembly asm = Assembly.GetExecutingAssembly(); //当前程序集
object[] items = new object[10];
for(int i=0; i<10; i++)
{
items[i] = asm.CreateInstance(t.FullName); //创建对象实例
}
你可以用泛型,或者object类型来存
没必要用type
只有你真正需要调用它里面的属性或函数的时候,你才需要知道它的type
用.NET 6(C# 10)写了一个反射实现的泛型集合,示例如下:
var list1 = CreateGenericList<int>();
list1.AddRange(new[] {1, 2, 3});
foreach (var item in list1)
{
Console.WriteLine($"int item: {item}");
}
var list2 = CreateGenericList<MyClass>();
list2.Add(new(2));
list2.Add(new(4));
list2.Add(new(6));
foreach (var item in list2)
{
Console.WriteLine($"MyClass id: {item.Id}");
}
static List<T> CreateGenericList<T>()
{
var listType = typeof(List<>);
var constructedListType = listType.MakeGenericType(typeof(T));
var instance = (List<T>) Activator.CreateInstance(constructedListType)!;
return instance;
}
public record MyClass(int Id);
运行结果:
int item: 1
int item: 2
int item: 3
MyClass id: 2
MyClass id: 4
MyClass id: 6