C#集合到Classic ASP

CD.*_*D.. 7 c# com collections asp-classic

我无法将C#集合暴露给Classic ASP.我试过使用IEnumerable和Array.但我得到了" object not a collection"错误.

我的方法看起来像:

public IEnumerable<MyObj> GetMyObj() { ... }
Run Code Online (Sandbox Code Playgroud)

并在经典ASP方面:

Dim obj, x 
Set obj = Server.CreateObject("Namespace.class")

For Each x in obj.GetMyObj
...
Run Code Online (Sandbox Code Playgroud)

那么如何将集合传递给Classic ASP呢?

更新:

可能这是一个进步,我找到的解决方案是使用一个继承IEnumerable而不是使用的新类IEnumerable<MyObj>:

public class MyEnumerable : IEnumerable
{
   private IEnumerable<MyObj> _myObj;

   .
   .
   .

    [DispId(-4)]
    public IEnumerator GetEnumerator()
    {
      _myObj.GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是现在当我尝试访问的属性MyObj出现错误:Object required.

任何的想法?

Kei*_*thS 6

我想你找到了答案; 使用VB的经典ASP没有内置泛型.所以,你试图传递IEnumerable<MyObj>给ASP,它出现了一个噩梦般的mashup名称,经典的ASP不知道如何使用.

解决方案是传递非通用的IEnumerable.那么问题是序列被视为包含基本的Object实例.您必须恢复到2.0之前的方法来转换从列表中获取的对象.在VB中这并不困难; 只需显式指定元素类型,VB将在迭代For Each时为您隐式强制转换:

Dim obj, x 
Set obj = Server.CreateObject("Namespace.class")

For Each x As MyObj in obj.GetMyObj //casts each element in turn
   ...
Run Code Online (Sandbox Code Playgroud)