Macro per creare collection tipizzate

Vista la frequenza con cui l'argomento emerge nelle chiacchierate "informatiche" su .NET, per chi non può ancora gustarsi i generics, posto la macro che utilizzo io in VB.NET 1.1 per creare le collection tipizzate. La macro è basata sull'esempio di MSDN per CollectionBase.

Posizionate il cursore tra Class MiaClasse ed End Class e fate partire la macro.

    Sub CreateCollection()

 

        If DTE.ActiveDocument.Selection Is Nothing Then

            System.Windows.Forms.MessageBox.Show("You must have the text editor open to execute this macro!", "WriteSimpleVBProperty", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation, System.Windows.Forms.MessageBoxDefaultButton.Button1)

            Exit Sub

        End If

 

        Dim entityName As String = InputBox(String.Format("Enter the entity class name:{0}(eg. Customer)", System.Environment.NewLine), "CreateCollection", String.Empty)

        If entityName = String.Empty Then Exit Sub

        Dim entityFullName As String = InputBox(String.Format("Enter the entity class fullname:{0}(eg. MyCompanyName.MyProject.Entities.Customer)", System.Environment.NewLine), "CreateCollection", String.Empty)

        If entityFullName = String.Empty Then Exit Sub

 

        Dim sb As New System.Text.StringBuilder

        sb.Append("    Inherits CollectionBase")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("    Default Public Property Item(ByVal index As Integer) As {0}", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        Get")

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("            Return DirectCast(List(index), {0})", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        End Get")

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("        Set(ByVal Value As {0})", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("            List(index) = Value")

        sb.Append(System.Environment.NewLine)

        sb.Append("        End Set")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Property")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("    Public Function Add(ByVal value As {0}) As Integer", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        Return List.Add(value)")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Function 'Add")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("    Public Function IndexOf(ByVal value As {0}) As Integer", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        Return List.IndexOf(value)")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Function 'IndexOf")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("    Public Sub Insert(ByVal index As Integer, ByVal value As {0})", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        List.Insert(index, value)")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Sub 'Insert")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("    Public Sub Remove(ByVal value As {0})", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        List.Remove(value)")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Sub 'Remove")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("    Public Function Contains(ByVal value As {0}) As Boolean", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("        ' If value is not of type {0}, this will return false.", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        Return List.Contains(value)")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Function 'Contains")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append("    Protected Overrides Sub OnInsert(ByVal index As Integer, ByVal value As [Object])")

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("        If Not value.GetType() Is GetType({0}) Then", entityFullName))

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("            Throw New ArgumentException(""value must be of type {0}."", ""value"")", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        End If")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Sub 'OnInsert")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append("    Protected Overrides Sub OnRemove(ByVal index As Integer, ByVal value As [Object])")

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("        If Not value.GetType() Is GetType({0}) Then", entityFullName))

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("            Throw New ArgumentException(""value must be of type {0}."", ""value"")", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        End If")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Sub 'OnRemove")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append("    Protected Overrides Sub OnSet(ByVal index As Integer, ByVal oldValue As [Object], ByVal newValue As [Object])")

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("        If Not newValue.GetType() Is GetType({0}) Then", entityFullName))

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("            Throw New ArgumentException(""value must be of type {0}."", ""newValue"")", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        End If")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Sub 'OnSet")

        sb.Append(System.Environment.NewLine)

        sb.Append(System.Environment.NewLine)

        sb.Append("    Protected Overrides Sub OnValidate(ByVal value As [Object])")

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("        If Not value.GetType() Is GetType({0}) Then", entityFullName))

        sb.Append(System.Environment.NewLine)

        sb.Append(String.Format("            Throw New ArgumentException(""value must be of type {0}."")", entityName))

        sb.Append(System.Environment.NewLine)

        sb.Append("        End If")

        sb.Append(System.Environment.NewLine)

        sb.Append("    End Sub 'OnValidate")

        sb.Append(System.Environment.NewLine)

 

        Try

            DTE.ActiveDocument.Selection.TopPoint.CreateEditPoint.Insert(sb.ToString)

        Catch ex As System.Exception

            System.Windows.Forms.MessageBox.Show(ex.Message, "CreateCollection", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error, System.Windows.Forms.MessageBoxDefaultButton.Button1)

        End Try

 

    End Sub

 

 

Print | posted @ martedì 14 marzo 2006 13:11

Comments have been closed on this topic.