Wissen Sie, ob es eigentlich implementiert IEnumerable<T>
? Wenn ja, könnten Sie Folgendes verwenden Enumerable.Count(IEnumerable<T> source)
(Teil von LINQ to Objects).
Ich kenne keine Entsprechung für die nicht-generische IEnumerable
- obwohl Sie eine solche Methode leicht selbst implementieren könnten. In C# würde es etwa so aussehen:
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();
}
}
}
Beachten Sie, dass das Entsorgen des Iterators am Ende wichtig ist - aber Sie können keine using
Anweisung als IEnumerator
selbst implementiert nicht IDisposable
(im Gegensatz zu IEnumerator<T>
).
Natürlich könnten Sie das entweder als C# in einer Klassenbibliothek verwenden, die Sie von IronPython aus aufrufen, oder den Code selbst in IronPython übersetzen.