Какой самый быстрый способ проверить, является ли объект IEnumerable?
Есть ли быстрый способ узнать, поддерживает ли содержимое переменной object
IEnumerable? В частности, я использую XPathEvaluate()
из System.Xml.XPath, который может возвращать объект, который может содержать bool, double, строку или 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()
, но я думал, что спрошу, есть ли более быстрый/простой способ.
Ответы
Ответ 1
Вы ищете 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))
Ответ 2
Используйте is
оператор:
if(action is IEnumerable)
Это то, что он делает:
An выражение выражает true, если предоставленное выражение не является нулевым, а предоставленный объект может быть добавлен к предоставленному типу, не вызывая исключения.
Ответ 3
Если вам просто нужно проверить, имеет ли объект тип, используйте is
. Если вам нужно использовать этот объект после использования as
, чтобы среда выполнения выполняла только один раз:
IEnumerable e = action as IEnumerable
if(null != e)
{
// Use e.
}
Ответ 4
Это должно работать.
action is IEnumerable;
Ответ 5
попробуйте этот
if(action is IENumerable)
{
//do some stuff
}
HTH