使用.NET函数的结果返回经典ASP中的LIST(Of Type)

时间:2011-07-13 19:30:42

标签: asp.net asp-classic

想象一下以下VB.NET类:

Public Class P
    Public Function GetDumbList() As List(Of DumbPeople)
        Dim retList As New List(Of DumbPeople)
        retList.Add Person1
        retList.Add Person2
        Return retList
    End Function
End Class

现在我们有以下经典ASP页面:

<%
Dim P
Set P = Server.CreateObject("Project.Assembly.Namespace.P")

retList = P.GetDumbList()
...
...
...
%>

你如何使用retList?我尝试使用以下两种方法循环:

1. For Each Person in retList  

引发错误“对象不是集合”

2. For i = 0 To Ubound(retList)

引发错误“类型不匹配:-UBound -

提前感谢您的帮助。 杰克

更新

基于Chris Haas的帮助,我们能够解决问题。它确实需要第二个ASPClassic辅助函数来将List(of T)转换为Object数组;但是,COM对象无法公开泛型方法。因此,输入必须是要转换为Object数组的特定类型的List。

下面的解决方案
Public Function DumbPeopleListToObjectArray(ByVal DPList As IList(Of DumbPeople)) As Object()
    Return Array.ConvertAll(Of DumbPeople, Object)(DPList.ToArray(), New Converter(Of DumbPeople, Object)(Function(j) DirectCast(j, Object)))
End Function

感谢Chris Haas让我朝着正确的方向前进。 希望这有助于其他人。

1 个答案:

答案 0 :(得分:3)

我认为你不能在ASP Classic中使用泛型,我认为你需要将它转换为数组。您可以为ASP Classic使用编写实用程序方法,该方法使用IList(Of T)并返回Object()。对于ASP Classic人来说,这是一个额外的步骤,但不是世界末日。

修改

这样的事情可能会起到作用:

Public Shared Function ToASPClassicArray(Of T)(ByVal myList As IList(Of T)) As T()
    Return myList.ToArray()
End Function

编辑2

这是另一个只返回一个对象的版本,非常难看,但应该仍然有用。

Public Shared Function ToASPClassicArray(Of T)(ByVal myList As IList(Of T)) As Object()
    Return Array.ConvertAll(Of T, Object)(myList.ToArray(), New Converter(Of T, Object)(Function(j) DirectCast(j, Object)))
End Function