c# – 是否可以根据表示其类型的字符串值创建对象实例?
发布时间:2020-12-15 23:55:54 所属栏目:百科 来源:网络整理
导读:我正在尝试基于 XML文档中的字符串在LINQ-to-XML查询中动态创建某种类型的对象.我习惯于能够在 PHP和 JavaScript中动态创建任何类型的对象,只需编写类似下面的内容: $obj = new $typeName(); 理想情况下,我希望能够做到这样的事情: ListsomeObj = (from so
我正在尝试基于
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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |