有没有快速的方法来确定object
变量的内容是否支持IEnumerable?具体来说,我正在使用System.Xml.XPath中的XPathEvaluate()
,它可以返回“An object that can contain a bool, a double, a string, or an IEnumerable.”
执行后执行:
XDocument content = XDocument.Load("foo.xml");
object action = content.XPathEvaluate("/bar/baz/@quux");
// Do I now call action.ToString(), or foreach(var foo in action)?
我可以用action.GetType().GetInterface()
来解决,但我想我会问是否有更快捷/更轻松的方式。
答案 0 :(得分:23)
您正在寻找is
运营商:
if(action is IEnumerable)
甚至更好,as
运营商。
IEnumerable enumerable = (action as IEnumerable);
if(enumerable != null)
{
foreach(var item in enumerable)
{
...
}
}
请注意,string
也会实现IEnumerable
,因此您可能希望将该检查扩展到if(enumerable != null && !(action is string))
答案 1 :(得分:2)
使用is
operator:
if(action is IEnumerable)
这就是它的作用:
如果提供的表达式为非null,则is表达式的计算结果为true,并且可以将提供的对象强制转换为提供的类型,而不会引发异常。
答案 2 :(得分:2)
如果您只需要测试对象是否属于某种类型,请使用is
。如果在使用as
之后需要使用该对象,那么运行时必须只执行一次转换:
IEnumerable e = action as IEnumerable
if(null != e)
{
// Use e.
}
答案 3 :(得分:0)
这应该有用。
action is IEnumerable;
答案 4 :(得分:0)
尝试这个
if(action is IENumerable)
{
//do some stuff
}
HTH