是否可以根据表示其类型的字符串值创建对象实例?

我正在尝试基于XML文档中的字符串在LINQ-to-XML查询中动态创建某种类型的对象。 我习惯于能够在PHP和JavaScript中动态创建任何类型的对象,只需能够编写如下内容:

$obj = new $typeName(); 

理想情况下,我希望能够做到这样的事情:

 List = (from someObjs in XMLfile select new someObj() { Name = (string)someObjs.Element("name"), NestedObj = new someObjs.Element("nestedObj").Element("type")() { NestedName = (string)someObjs.Element("nestedObj").Element("name") } }).ToList(); 

如果不抓住当前正在执行的程序集,我就无法弄清楚如何做到这一点。

您可以使用:

 Activator.CreateInstance(Type.GetType(typeName)) 

当然,这仅适用于具有无参数构造函数的类型。


更新(初始化对象):

您可以使用C#4动态类型function来设置新创建的对象的属性:

 dynamic newObj = Activator.CreateInstance(Type.GetType(typeName)); newObj.NestedName = str; 

在LINQ to XML查询的上下文中,您可能不得不使用具有显式主体的lambda语法:

 var list = XMLFile.Select(someObjs => { dynamic nestedObj = Activator.CreateInstance( Type.GetType(someObjs.Element("nestedObj").Element("type"))); nestedObj.NestedName = (string)someObjs.Element("nestedObj").Element("name"); return new someObj { Name = (string)someObjs.Element("name"), NestedObj = nestedObj }; }).ToList(); 

使用激活器类的createinstance方法