我在向经典 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/