我试图返回一个集合的部门。网会被消耗ASP通过COM互操作。使用。净我只是返回的一般收集的,例如 List<Department>, 但它似乎是仿制药不工作,以及与COM互操作。因此,我有什么选择?

我想到两个迭代表能够访问的一个项目索引。我应该继承的 List<Department>, 中,实现一个 IList, IList<Department> 或者另一个接口,或者是有更好的办法?理想的是我会喜欢没有实施一种定义收集每一个类型表,我需要。此外,会 List[index] 即使工作与COM互操作?

谢谢, Mike

例。净组成部分(C#):

public class Department {
    public string Code { get; private set; }
    public string Name { get; private set; }
    // ...
}

public class MyLibrary {
    public List<Department> GetDepartments() {
        // return a list of Departments from the database
    }
}

例ASP码:

<%
Function PrintDepartments(departments)
    Dim department
    For Each department In departments
        Response.Write(department.Code & ": " & department.Name & "<br />")
    Next
End Function

Dim myLibrary, departments
Set myLibrary = Server.CreateObject("MyAssembly.MyLibrary")
Set departments = myLibrary.GetDepartments()
%>
<h1>Departments</h1>
<% Call PrintDepartments(departments) %>
<h1>The third department</h1>
<%= departments(2).Name %>

相关的问题:

有帮助吗?

解决方案

后一些更多的研究和试验和错误,我认为我找到一个解决方案,通过使用 System.Collections.ArrayList.但是,这不起作用越来越有价值的指数。为此,我创造了一个新的类 ComArrayList 那继承了 ArrayList 并增加了新的方法 GetByIndexSetByIndex.

COM互操作兼容的收集:

public class ComArrayList : System.Collections.ArrayList {
    public virtual object GetByIndex(int index) {
        return base[index];
    }

    public virtual void SetByIndex(int index, object value) {
        base[index] = value;
    }
}

更新。净组我的报表馆.GetDepartments:

public ComArrayList GetDepartments() {
    // return a list of Departments from the database
}

更新ASP:

<h1>The third department</h1>
<%= departments.GetByIndex(2).Name %>

其他提示

因为你是只耗时的数据在ASP,我建议返回 Department[].这应该直接与有SAFEARRAY在COM.它支持列举并编制索引的访问。

public Department[] GetDepartments() {
    var departments = new List<Department>();
    // populate list from database
    return departments.ToArray();
}

在ASP码,你能不能不这么做?

<h1>The third department</h1>
<%= departments.Item(2).Name %>

我知道,在VB。NET,C#索引支持通过"项目"的财产,因此,同样的想法可以在工作ASP。

我一直在试图解决这一同样的问题vb.net (不流利C#)。

由于清单(T)支持IList接口,COM接口,为我的目的我已经尝试指定

Public Class MyClass
...
   Private _MyList As List(of MyObject)
   Public ReadOnly Property MyList As IList Implements IMyClass.MyList
    Get
        Return _MyList
    End Get
   End Property

然后指定的公共接口,COM看到

ReadOnly Property MyList As IList

这似乎工作的现从一个经典的ASP客户,例化的对象,呼吁发电机的功能,然后读取列表的财产就像一阵列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top