C# 如何设置动态类型字段的值

C# 如何设置动态类型字段的值,c#,types,C#,Types,字符串typeName=Request.QueryString[“typeName”]; Type t=Type.GetType(typeName); t、 GetField(“SomeField”).SetValue(?“Hello”) 在上面的代码中,我创建了一个类型对象,它保存了一个自定义类型的信息,该自定义类型的名称来自QueryString 现在的问题是这个自定义类型有一些字段,我想给这个字段赋值,但我不知道哪个类型可以来自QueryString,所以我不能在SetValue方法中的?

字符串typeName=Request.QueryString[“typeName”]; Type t=Type.GetType(typeName); t、 GetField(“SomeField”).SetValue(?“Hello”)

在上面的代码中,我创建了一个类型对象,它保存了一个自定义类型的信息,该自定义类型的名称来自QueryString

现在的问题是这个自定义类型有一些字段,我想给这个字段赋值,但我不知道哪个类型可以来自QueryString,所以我不能在SetValue方法中的位置说任何特定类型

我该怎么办


提前感谢。

这很可能是做某事的错误方式。如果你能举一个更具体的例子来说明你想要完成的事情,我们也许可以给出一些替代方法

这就是说,您没有TypeName的实例,所以您显然不能用任何东西来代替“?”。不过,您可以使用创建该TypeName的新实例

例如:

string typeName = Request.QueryString["TypeName"];
Type t = Type.GetType(typeName);
object instance = Activator.CreateInstance(t);
t.GetField("SomeField").SetValue(instance, "Hello");

这很可能是做某事的错误方式。如果你能举一个更具体的例子来说明你想要完成的事情,我们也许可以给出一些替代方法

这就是说,您没有TypeName的实例,所以您显然不能用任何东西来代替“?”。不过,您可以使用创建该TypeName的新实例

例如:

string typeName = Request.QueryString["TypeName"];
Type t = Type.GetType(typeName);
object instance = Activator.CreateInstance(t);
t.GetField("SomeField").SetValue(instance, "Hello");

Type无法创建实例或其他方法来完成它?System.Activator是您用于创建实例的工具。谢谢,除了该解决方案之外,您还知道并向我推荐了其他解决方案吗?不知道您使用它的目的是什么?不可以。如果您知道通过查询字符串将允许的类型集,那么您可以使用Switch-Case来确定它是哪种类型,一旦您确定了可以分配其字段的类型。是的,听起来不太整洁,但肯定能达到目的。如果您识别了类型名称,您甚至不需要使用类型对象来创建其实例。类型无法创建实例或其他实现它的方法?System.Activator是您创建实例所使用的方法。谢谢,除了该解决方案之外,您还知道并建议我使用其他解决方案吗?不知道您使用它的目的是什么?不可以。如果您知道通过查询字符串将允许的类型集,那么您可以使用Switch-Case来确定它是哪种类型,一旦您确定了可以分配其字段的类型。是的,听起来不太整洁,但肯定能达到目的。如果您识别了类型名,您甚至不需要使用类型对象来创建其实例。