假设情况。假设我有一个包含许多私有字段的类。我希望它能够使用正确的type
实例化它可以找到的每个字段。到目前为止,我已经使用了
public class TestClass
{
private SomeClass sc;
private AnotherClass ac;
public TestClass()
{
var type = GetType();
var fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
.Select(x => x.Name)
.ToList();
foreach (var f in fields)
type.GetField(f).SetValue(/*instantiate here*/);
}
}
如何实例化它? (这假设每个类中的new()
构造函数是无参数的并且不是空的)
答案 0 :(得分:2)
Activator.CreateInstance(Type)
可以从该类型创建实例。这需要一个无参数的构造函数(参数有重载)。
要使用它,只需稍微修改一下代码:
public class TestClass
{
private SomeClass sc;
private AnotherClass ac;
public TestClass()
{
var type = GetType();
type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
.ToList()
.ForEach(f => {
f.SetValue(this, Activator.CreateInstance(f.FieldType);
});
}
}