我正在使用LINQ-to-XML查询文件以获取对象列表。它们都具有相同的结构(一组选项,一个长度不确定的参数列表)。根据它们在XML文件中的名称,我想要将参数用于完全不同的事情 - 因此我创建了这个对象的子类。
我的问题是 - 如何动态地调用正确的构造函数,而不必像case语句那样做?或者说,优雅地从XML实例化不同的子类的解决方案在其他地方吗?
我的问题是 - 如何动态地调用正确的构造函数,而不必像case语句那样做?或者说,优雅地从XML实例化不同的子类的解决方案在其他地方吗?
class Object1
{
string name;
OptionObj opt;
List<Param> 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并调用它,比如...
MethodInfo m = t.GetMethod(someName);
m.Invoke(yourObj, null);
但这意味着我将不得不实例化9或10个这些子类对象(并获取每个对象的类型),仍然会出现某种形式的case语句。
有没有更优雅的方法来动态调用子类构造函数?