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)不能作为解决方法。尝试:
这假设typeFieldType
具有默认构造函数。尝试:
这假设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公里)