Знаете ли вы, если это на самом деле реализует IEnumerable<T>
? Если это так, вы можете использовать Enumerable.Count(IEnumerable<T> source)
(часть LINQ to Objects).
Я не знаю эквивалента для неуниверсального IEnumerable
- хотя вы могли бы достаточно легко реализовать такой метод самостоятельно. В C # это будет выглядеть примерно так:
public static int Count(IEnumerable source)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
// Optimization for ICollection implementations (e.g. arrays, ArrayList)
ICollection collection = source as ICollection;
if (collection != null)
{
return collection.Count;
}
IEnumerator iterator = source.GetEnumerator();
try
{
int count = 0;
while (iterator.MoveNext())
{
count++;
}
return count;
}
finally
{
IDisposable disposable = iterator as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
}
Обратите внимание, что удаление итератора в конце важно - но вы не можете использовать оператор using
, поскольку IEnumerator
сам по себе не реализует IDisposable
(в отличие от IEnumerator<T>
).
Конечно, вы можете использовать это как C # в библиотеке классов для вызова из IronPython или перевести код на IronPython самостоятельно.