我正在尝试根据 XML 文档中的字符串在 LINQ-to-XML 查询中动态创建特定类型的对象。我习惯于通过简单地编写如下内容来动态创建任何类型的 PHP 和 JavaScript 对象:
$obj = new $typeName();
理想情况下,我希望能够执行以下操作:
List<someObj> = (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 动态类型功能来设置新创建对象的属性:
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();
关于c# - 是否可以根据表示其类型的字符串值创建对象实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538304/