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

本文关键字:方法 是什么 对象 是否 IEnumerable 测试 | 更新日期: 2023-09-27 18:02:30

是否有一种快速的方法来找出object变量的内容是否支持IEnumerable?具体来说,我使用的是System.Xml中的XPathEvaluate()。XPath,它可以返回"一个可以包含bool、double、string或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(),但我想我应该问是否有一个更快/更容易的方法。

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

您正在寻找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))

使用is运算符:

if(action is IEnumerable)

它的作用是:

如果提供的表达式为非空,则is表达式的计算结果为true,并且可以将提供的对象强制转换为提供的类型,而不会引发异常。

如果你只需要测试一个对象是否是一个类型,那么使用is。如果您需要在使用as之后使用该对象,则运行时必须只执行一次强制转换:

IEnumerable e = action as IEnumerable
if(null != e)
{
    // Use e.
}

应该可以。

    action is IEnumerable;

试试这个

if(action is IENumerable)
{
  //do some stuff
}

hth