C# 带有对FieldType的反射的new()

C# 带有对FieldType的反射的new(),c#,reflection,C#,Reflection,我有一些代码看起来像 else if (oField.FieldType.IsClass) { //var t = oField.FieldType.new() someObj.fill_data(t); oField.SetValue(o, t); } 我不知道如何分配var t。我该怎么做?我无法知道该类型是什么,因此无法编写FieldType。IsAssignableFrom(KnownType)不能作为解决方法。尝试: 这假设typeFieldType具有默认构

我有一些代码看起来像

else if (oField.FieldType.IsClass)
{
    //var t = oField.FieldType.new()
    someObj.fill_data(t);
    oField.SetValue(o, t);
}
我不知道如何分配var t。我该怎么做?我无法知道该类型是什么,因此无法编写FieldType。IsAssignableFrom(KnownType)不能作为解决方法。

尝试:

这假设type
FieldType
具有默认构造函数。

尝试:


这假设type
FieldType
有一个默认构造函数。

也许您应该查看返回类型的
type.GetConstructor(…).Invoke(…)

也许您应该查看返回类型的
type.GetConstructor(…).Invoke(…)

下面是一些示例代码:

 class TypeTest
 {
     int m_parameter;
     public TypeTest()
     {
     }
     public TypeTest(int parameter)
     {
         m_parameter = parameter;
     }
     public int Param { get { return m_parameter; } }
}

//method1 - Using generic CreateInstance
TypeTest defConstructor = Activator.CreateInstance <TypeTest>();

//method2 - Using GetConstructor
ConstructorInfo c = typeof(TypeTest).GetConstructor(new Type[] { typeof(int)});
TypeTest getConstructor = (TypeTest)c.Invoke(new object[] { 6 });

//method3 - Using non-generic CreateInstance
TypeTest nonDefaultConstructor = (TypeTest)Activator.CreateInstance(typeof(TypeTest), 6);
类类型测试
{
int m_参数;
公共类型测试()
{
}
公共类型测试(int参数)
{
m_参数=参数;
}
公共int参数{get{return m_参数;}}
}
//方法1-使用泛型CreateInstance
TypeTest defConstructor=Activator.CreateInstance();
//方法2-使用GetConstructor
ConstructorInfo c=typeof(TypeTest).GetConstructor(新类型[]{typeof(int)});
TypeTest getConstructor=(TypeTest)c.Invoke(新对象[]{6});
//方法3-使用非泛型CreateInstance
TypeTest非默认构造函数=(TypeTest)Activator.CreateInstance(typeof(TypeTest),6);

以下是一些示例代码:

 class TypeTest
 {
     int m_parameter;
     public TypeTest()
     {
     }
     public TypeTest(int parameter)
     {
         m_parameter = parameter;
     }
     public int Param { get { return m_parameter; } }
}

//method1 - Using generic CreateInstance
TypeTest defConstructor = Activator.CreateInstance <TypeTest>();

//method2 - Using GetConstructor
ConstructorInfo c = typeof(TypeTest).GetConstructor(new Type[] { typeof(int)});
TypeTest getConstructor = (TypeTest)c.Invoke(new object[] { 6 });

//method3 - Using non-generic CreateInstance
TypeTest nonDefaultConstructor = (TypeTest)Activator.CreateInstance(typeof(TypeTest), 6);
类类型测试
{
int m_参数;
公共类型测试()
{
}
公共类型测试(int参数)
{
m_参数=参数;
}
公共int参数{get{return m_参数;}}
}
//方法1-使用泛型CreateInstance
TypeTest defConstructor=Activator.CreateInstance();
//方法2-使用GetConstructor
ConstructorInfo c=typeof(TypeTest).GetConstructor(新类型[]{typeof(int)});
TypeTest getConstructor=(TypeTest)c.Invoke(新对象[]{6});
//方法3-使用非泛型CreateInstance
TypeTest非默认构造函数=(TypeTest)Activator.CreateInstance(typeof(TypeTest),6);

至少,您必须猜测存在一个没有参数的构造函数(因此将
新类型[]{}
传递到
GetConstructor
),或者知道构造函数的特定参数类型列表。后者似乎不太可能。至少,您必须猜测存在一个没有参数的构造函数(因此将
newtype[]{}
传递到
GetConstructor
),或者知道构造函数的特定参数类型列表。后者似乎不太可能。我将另一个人标记为其他ppl接受,以查看他的示例代码。我更喜欢你的答案。(他<10k)我将另一个人标记为接受其他ppl,以查看他的示例代码。我更喜欢你的答案。(他身高<10公里)