我正在使用LINQ-to-XML来查询文件以获取对象列表.它们都具有相同的结构(一组选项,一组不确定长度的参数).基于XML文件中的名称,我想将参数用于完全不同的东西 - 所以我创建了这个对象的子类.
我的问题是 - 如何动态调用正确的构造函数,而不执行类似case语句的操作?或者从XML优雅地实例化不同子类的解决方案是否位于其他地方?
class Object1 { string name; OptionObj opt; List parameters; } class sonOfObject : Object1 { public void ExecuteSomething() { //do something with the parameters } } class secondSonOfObject : Object1 { public void ExecuteSomething() { //do something entirely different with the parameters } } var query = from x in xmlDoc.Descendants("Object") select new Object { //select the object from the XML }
在这段代码之后,我可以使用复制构造函数从更通用的查询对象中创建一个sonOfObject.但是,如何根据子类的名称动态地执行此操作?
我知道你可以从一个类型中获取MethodInfo并调用它ala ...
MethodInfo m = t.GetMethod(someName); m.Invoke(yourObj, null);
但这意味着我必须实例化这些子类对象中的9个或10个(并获取每个类对象的类型),并且仍然以某种case语句结束.
是否有更优雅的方式来动态调用子类构造函数?
Activator.CreateInstance允许您将类名作为字符串传递,它将返回该类的新实例.