【问题标题】:Extension method not a member of List(Of ...)扩展方法不是 List(Of ...) 的成员
【发布时间】:2019-07-19 19:45:39
【问题描述】:

我已将以下内容添加到我的项目中:

Imports System.Runtime.CompilerServices

Module ExtensionMethods

    <Extension()>
    Public Sub Move(Of T)(ByVal uBase As List(Of T), ByVal index As Integer, ByVal newIndex As Integer)

        If uBase.Count <= newIndex Then
            Debug.Assert(False)
            Return 'not possible!
        ElseIf newIndex < 0 Then
            Debug.Assert(False)
            Return 'not possible!
        End If

        Dim item As T = uBase.Item(index)
        uBase.RemoveAt(index)
        uBase.Insert(newIndex, item)

    End Sub

End Module

然后我创建了一个类:

Public Class clsPageWordList

    Private m As New List(Of udtWordImage)

    Private m_CountCellsToOccupy As Integer = 0

    Private _iCur As Integer = 0

    Public Sub New()

        Me.ResetCurrentIndex()

    End Sub

    Public ReadOnly Property Count() As Integer

        Get
            Return m.Count
        End Get

    End Property

    Public Sub ResetCurrentIndex()

        _iCur = 0

    End Sub

    Public ReadOnly Property CurrentIndex() As Integer
        Get
            Return _iCur
        End Get
    End Property

    Public Sub Add(ByVal uText As String, ByVal uImageGUID As String)

        Dim n As New udtWordImage
        n.GeneralImageGUID = uImageGUID
        n.Text = uText

        m.Add(n)

    End Sub
    Public Sub Update(ByVal uIndex As Integer, ByVal uText As String, ByVal uImageGUID As String)

        Dim n As New udtWordImage
        n.Text = uText
        n.GeneralImageGUID = uImageGUID

        m(uIndex) = n

    End Sub

    Public ReadOnly Property Text(ByVal uIndex As Integer) As String
        Get
            Return m(uIndex).Text
        End Get
    End Property

    Public ReadOnly Property GeneralImageGUID(ByVal uIndex As Integer) As String
        Get
            Return m(uIndex).GeneralImageGUID
        End Get
    End Property

    Public Sub RemoveAt(ByVal uIndex As Integer)

        m.RemoveAt(uIndex)

    End Sub

    Public Sub MoveUp(ByVal uIndex As Integer)

        m.move(uIndex, uIndex - 1)

    End Sub

    Public Sub ScrollForward()

        Dim lNewCur As Integer = _iCur + m_CountCellsToOccupy


        If lNewCur > m.Count - 1 Then
            lNewCur = 0
            If lNewCur < 0 Then
                lNewCur = 0
            End If
        End If

        _iCur = lNewCur

    End Sub
    Public Sub ScrollToStart()

        _iCur = 0

    End Sub
    Public Sub ScrollToEnd()

        _iCur = (m.Count - 1) - m_CountCellsToOccupy

        If _iCur < 0 Then
            _iCur = 0
        End If

    End Sub
    Public Sub ScrollBackward()

        _iCur = _iCur - m_CountCellsToOccupy

        If _iCur < 0 Then
            _iCur = 0
        End If

    End Sub


    Public WriteOnly Property CountCellsToOccupy() As Integer
        Set(value As Integer)
            m_CountCellsToOccupy = value
        End Set
    End Property

    Public Sub MoveDown(ByVal uIndex As Integer)

        m.move(uIndex, uIndex + 1)

    End Sub
    Public Function ShallowCopy() As clsPageWordList

        Return DirectCast(Me.MemberwiseClone(), clsPageWordList)

    End Function
End Class

结构体是这样定义的:

Public Structure udtWordImage
    Dim Text As String
    Dim GeneralImageGUID As String
    Dim WordListIndex As Integer
End Structure

现在编译器抱怨该行

m.move(uIndex, uIndex - 1)

错误是“Move 不是 List(Of udtWordImage) 的成员”。

奇怪的是,如果我右键单击 Move 方法并选择“转到定义”,它会将我带到 ExtensionMethods 子。

这里出了什么问题?

谢谢!

【问题讨论】:

标签: vb.net extension-methods


【解决方案1】:

忘记将模块标记为公开。

这样改可以解决问题:

Public Module ExtensionMethods

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多