我有一个返回非常大量对象的C#方法,这个方法将被Matlab使用。
我期望的结果类型是
在 Matlab 中有没有一种方法可以迭代它,或者甚至将
注:
1. 由于数据量大,转换为
namespace MyNameSpace{
public static class MyClass{
public static IEnumerable<MyDataObject> GetVeryLargeResponse(){
while(CheckForSomeFunkyConditionThatsRarelyTrue()){
yield return GetMyNextDataObject();
}
yield break;
}
}
}
在Matlab中,当我进行调用时
result = MyClass.GetVeryLargeResponse();
我期望的结果类型是
IEnumerable<MyDataObject>
,这样我就可以通过调用result.GetEnumerator()
来获取 Enumerator<MyDataObject>
。
然而,我得到的类型是 MyNameSpace.<GetVeryLargeResponse>d_3
的 result
,没有可用的 GetEnumerator()
方法。我看到 result
的一个超类是 System.Collections.Generic.IEnumerable<MyClass>
。在 Matlab 中有没有一种方法可以迭代它,或者甚至将
result
转换为 IEnumerable<MyClass>
?注:
1. 由于数据量大,转换为
Array
/ IList
等不可行。
2. 这不是关于特定于 IQueryable
的问题,因此与How can I iterate over a C# IEnumerable in Matlab? 不同。
3. 我使用的是 Matlab 2010b。
AsEnumerable
不就可以实现你在这里尝试做的事情了吗?而且不需要你创建一个包装类型。 - ServyIEnumerable<T>
的执行时类型,而不是编译时类型。我会稍微编辑一下... - Jon SkeetAsEnumerable()
只会返回输入引用,因为在这里重要的是执行时类型,这并没有帮助。 - Jon SkeetAsEnumerable()
,您会收到一个错误。我已经发布了使用显式转换的解决方案。 - sean