如何强制转换XPathEvaluate的返回值



I"正在尝试将XPathEvaluate方法的返回值强制转换为IEnumerable。此代码不起作用:var elements = (IEnumerable<XObject>) doc.XPathEvaluate(myXpath);

这种方法效果很好:var elements = ((IEnumerable<object>) doc.XPathEvaluate(myXpath)).Cast<XObject>();

有人能给我解释一下区别吗?谢谢

XPathEvaluate返回对象后面的EvaluateIterator

它不能直接广播到IEnumerable<XObject>

Cast方法通过这个迭代器运行,并返回转换后的IEnumerable<XObject>序列。

根据扩展方法XPathEvaluate,向该方法返回一个object,它是布尔、双精度、字符串或IEnumerable

幸运的是,如果我们有一个类似对象的IEnumerable序列,我们可以将其转换为IEnumerable<XObject>

如果确定可枚举序列中的每个元素都是XObject,则可以使用Enumerable.Cast<XObject>()。如果您认为某个对象可能是另一种类型,并且希望忽略其他类型,请使用Enumeable.OfType<XObject>

object evaluatedDocument = doc.XPathEvaluate(myXpath);
if (evaluatedDocument is IEnumerable enumerableSequence)
{
// the returned object implements IEnumerable
IEnumerable<XObject> result = enumerableSequence.Cast<XObject>();
// or:
IEnumerable<XObject> result = enumerableSequence.OfType<XObject>();
}

最新更新