测试对象是否为IEnumerable的最快方法是什么?

时间:2011-07-18 15:08:41

标签: c# .net-3.5

有没有快速的方法来确定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()来解决,但我想我会问是否有更快捷/更轻松的方式。

5 个答案:

答案 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