C# 集合到经典 ASP

标签 c# com collections asp-classic

我在向经典 ASP 公开 C# 集合时遇到问题。 我试过使用 IEnumerable 和数组。但我收到“object not a collection”错误。

我的方法是这样的:

public IEnumerable<MyObj> GetMyObj() { ... }

在经典 ASP 方面:

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

For Each x in obj.GetMyObj
...

那么如何将集合传递给经典 ASP?

更新:

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

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

   .
   .
   .

    [DispId(-4)]
    public IEnumerator GetEnumerator()
    {
      _myObj.GetEnumerator();
    }
}

但现在当我尝试访问属性MyObj我得到一个错误:Object required .

有什么想法吗?

最佳答案

我想你找到了答案;使用 VB 的经典 ASP 没有内置泛型。因此,您尝试传递 IEnumerable<MyObj>到 ASP,它作为一个噩梦般的混搭名称出现,经典 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
   ...

关于C# 集合到经典 ASP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969716/

相关文章:

c# - 释放 COM 对象的正确方法?

c# - COM 是如何工作的?

java - 尝试理解 Java 8 中的 lambda 和流

c# - 在 C++ 和 C# 之间进行通信的最快方式

c# - 在 Outlook VSTO 加载项中,C# 不允许您将事件处理程序 Hook 到 Application.Quit

c# - 无法分配给从 VBA 使用的 C# 类中的哈希表项

objective-c - NSSet 的 containsObject 是否为 : test for pointer equality or value equality?

java - java中的列表(ArrayList)遍历

c# - 此代码中是否存在任何性能问题

c# - Windows Phone 缺少根元素