我有一个函数SelectNext()
,它接受一个集合参数(类型为IEnumerable
),然后选择集合中的下一个项目并返回该项目。
'BaseListTypes is an Enum
Function SelectNext(listType As BaseListTypes, lst As IEnumerable(Of Object)) As Object
Dim res As Object
'function body here....
Return res
End Function
上述函数适用于任何List(Of T),其中T是对象或字符串。
然而,当我传递List(Of My_STRUCTURE)
(我拥有的自定义结构,包含3个字符串变量)时,它失败了
显然,由于Structure类似于整数,其他基类型是值类型。 对象是引用类型。我可以看到为什么我在运行时收到错误。
我的问题是,有没有一种更好的方法,而不仅仅是将我的功能重载为:
Function SelectNext(listType As BaseListTypes, lst As IEnumerable(Of My_STRUCTURE)) As Object
答案 0 :(得分:0)
你可以使用像SelectNext<T>
class Program
{
Program()
{
//SelectNext_Old(new List<object>(0)); it works
//SelectNext_Old(new List<Point>(0)); id doesn't work
SelectNext(new List<object>(0));
SelectNext(new List<Point>(0));
}
public object SelectNext_Old(BaseListTypes listType, IEnumerable<object> lst)
{
return null;
}
public object SelectNext<T>(BaseListTypes listType, IEnumerable<T> lst)
{
return null;
}
}
我不知道VB,但我想你可以得到这个想法!
答案 1 :(得分:0)
理论上,这适用于任何类型,无论是引用类型还是值类型:
Function SelectNext(Of T)(listType As BaseListTypes, lst As IEnumerable(Of T)) As T
Dim res As T
'function body here....
Return res
End Function
我确实需要更多信息才能确定。你的问题实际上有点模糊。首先,&#34;选择集合中的下一个项目&#34;实际上意味着您应该编辑您的问题,使其更加完整,更好地描述您正在做的事情以及发生的错误和位置。