我需要做的是这样的事情,但真的不明白如何。按类型C设置对象#
Object value = new typeof(i.FieldType.GetType());
值的类型可以是任何东西,它只是继承一个类(例如,BaseClass)。该类型将从(.Net)System.Reflections中读取。但我不知道如何创建一个新的对象。
如何创建一个新的()对象(构造函数),对象存储为对象,其中的类型如果System.Reflections已知?
我需要做的是这样的事情,但真的不明白如何。按类型C设置对象#
Object value = new typeof(i.FieldType.GetType());
值的类型可以是任何东西,它只是继承一个类(例如,BaseClass)。该类型将从(.Net)System.Reflections中读取。但我不知道如何创建一个新的对象。
如何创建一个新的()对象(构造函数),对象存储为对象,其中的类型如果System.Reflections已知?
您可以使用ConstructorInfo类
var constructorInfo = typeof(myclasstype).GetConstructor();
if (constructorInfo != null)
{
var myclass = constructorInfo.Invoke();
}
这可能是很难做到的。见奥利弗在问题下面的评论。 –
你真的需要在所有的构造类型?如果你想动态地将字符串转换为类型(根据你的评论之一),那么你所需要的只是System.Convert.ChangeType
方法。
object convertedValue = Convert.ChangeType(stringValue, i.FieldType.GetType());
当第二参数ChangeType
是System.Type
。
的Activator
实际上只是需要,如果你想创建新的(空)动态对象。如果您所说的字段类型是标准类型,如string
,int
或bool
,则Convert.ChangeType
将执行此操作。
这听起来像是我需要一个工厂方法。见https://en.wikipedia.org/wiki/Factory_method_pattern –
我想这可能会有所帮助:http://stackoverflow.com/questions/6472980/how-to-instantiate-the-class-in-an-assembly-using - 与c-net的反射? –
除非你正在写一些专门的东西,否则一个通用的应用程序不需要反射。按照@Robert的建议使用基类,接口或者工厂,你应该没问题。解释你以后如何使用这些代码。 – CodeCaster