当您只需要更改参数数据类型

时间:2017-12-07 01:55:47

标签: vb.net

我有一个函数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

2 个答案:

答案 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;实际上意味着您应该编辑您的问题,使其更加完整,更好地描述您正在做的事情以及发生的错误和位置。