测试对象是否为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()
,但我想我应该问是否有一个更快/更容易的方法。
您正在寻找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