首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在FieldType上使用反射的new()

在FieldType上使用反射的new()
EN

Stack Overflow用户
提问于 2009-12-31 10:47:38
回答 3查看 172关注 0票数 0

我有一些代码,看起来像这样

代码语言:javascript
复制
else if (oField.FieldType.IsClass)
{
    //var t = oField.FieldType.new()
    someObj.fill_data(t);
    oField.SetValue(o, t);
}

我不知道如何分配变量。我该怎么做呢?我没有办法知道类型可能是什么,所以编写FieldType.IsAssignableFrom(KnownType)不是一种解决办法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-31 11:14:06

下面是一些示例代码:

代码语言:javascript
复制
 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);
票数 1
EN

Stack Overflow用户

发布于 2009-12-31 10:51:13

试试Activator.CreateInstance

代码语言:javascript
复制
object t = Activator.CreateInstance(oField.FieldType);

这里假设类型FieldType有一个默认的构造函数。

票数 4
EN

Stack Overflow用户

发布于 2009-12-31 10:53:34

也许你应该检查一下返回类型的Type.GetConstructor(...).Invoke(...)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1983705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档