想象一下以下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让我朝着正确的方向前进。 希望这有助于其他人。
答案 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