我有一个C#类,它实现了2个IEnumerable接口.如何从IronPython访问任一界面?
我的课:
public class MyClass : IEnumerable<TypeA>, IEnumerable<TypeB>
{
IEnumerator<TypeA> IEnumerable<TypeA>.GetEnumerator()
{
return _lstTypeA.GetEnumerator();
}
IEnumerator<TypeB> IEnumerable<TypeB>.GetEnumerator()
{
return _lstTypeB.GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
我在Python中尝试了以下内容,但它运行时没有错误,它不会从IEnumerable接口返回任何元素:
x = MyClass()
xA = clr.Convert(x, IEnumerable[TypeA])
for y in xA: print y
Run Code Online (Sandbox Code Playgroud)
我不喜欢你的课堂设计.特别是您实现了两个不同版本的IEnumerable<T>返回不同成员.返回相同成员的两个版本稍好一些,但我仍然不喜欢那么多.
IEnumerable所以它与IEnumerable<T>s 两者一致是不可能的.特别是打破了OfType和Castlinq方法.Select<T>(this IEnumerable<T> ...)不知道IEnumerable采取哪种方法.foreach上MyClassTypeA和TypeB是引用类型的差异IEnumerable<out T>回来咬你.因为他们都提供他们IEnumerable<T'>所有共同的祖先.还有几个我还没有想到的问题.
解决方法简单而干净:有两个独立的可枚举属性.
public class MyClass
{
public IEnumerable<TypeA> TypeAs{get{_lstTypeA.Select(x=>x)}};
public IEnumerable<TypeB> TypeBs{get{_lstTypeB.Select(x=>x)}};
}
Run Code Online (Sandbox Code Playgroud)