Jeff wrote: > I'm trying to implement a Python iterator in C# without also > implementing IEnumerator/IEnumerable (I'm also assuming it's even > possible, of course). When trying to use the class in a for loop (`cu` > is a Cursor instance): > > >>> for row in cu: > .... print cu > > TypeError: Unable to cast object of type 'Cursor' to type > 'IronPython.Runtime.Types.IPythonObject'.
That's definitely a bug. We usually check for the interfaces first and we have a code path that's assuming we have a user-defined object when we're not an enumerable/enumerator but we have __iter__. It's easy enough to fix we're just trying to generate optimal code for getting the Python type of an object. Is there a reason you can't implement IEnumerator/IEnumerable? You can Always implement it explicitly like: IEnumerator IEnumerable.GetEnumerator() { } If having the public surface area is an issue. Or you could mark the methods w/ [PythonHidden] attribute. > > I've got the necessary methods on the class (__iter__() and next()) > and I've marked the class with [PythonType]; is there anything else > that needs to be done? _______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com