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.
任何的想法?
我想你找到了答案; 使用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)
| 归档时间: |
|
| 查看次数: |
1416 次 |
| 最近记录: |