有没有像 Linq to XML 或 Xpath 这样的好方法来循环 Batch 中的元素并创建 Dog 实例而无需手动解析 Dog?
这取决于您所说的“手动”是什么意思。我发现有一个模式很有用,其中每个相关类都有一个静态FromXElement
工厂方法(或一个构造函数采用一个XElement
)来提取相关细节。使用 LINQ to XML 非常简单,例如
public static Dog FromXElement(XElement element)
{
// Or whatever...
return new Dog((string) element.Element("Name"),
(double) element.Element("Weight"));
}
然后你可以使用:
List<Dog> dogs = batch.Elements("Dog")
.Select(x => Dog.FromXElement(x))
.ToList();
(您也许可以Select(Dog.FromXElement)
改用 - 这取决于您使用的 C# 版本。)
要批量处理所有动物,您可能需要以下内容:
private static readonly Dictionary<string, Func<XElement, Animal>> Factories =
new Dictionary<string, Func<XElement, Animal>>
{
{ "Dog", Dog.FromXElement },
{ "Cat", Cat.FromXElement },
// etc
}
...
List<Animal> animals = batch.Elements()
.Select(x => Factories[x.Name.LocalName](x))
.ToList();