为数组编写自己的“添加”方法

时间:2013-09-25 19:08:11

标签: .net arrays vb.net visual-studio-2012 add

我想为声明的数组编写一个.Add方法。

逻辑是如果您编写类似这样的代码:

 Sub Main()

    Dim names(2) As String

    names(0) = "john"
    names(1) = "jane"
    names(2) = "mary"
End Sub

您可以调用Add方法并将名称作为参数来添加元素。 带有额外元素的元素应该加上+1然后是前一个最高索引。 所以在上面的情况下...如果你愿意:

add(Liz)

然后输出必须是:

names(0) = "john"
names(1) = "jane"
names(2) = "mary"
names(3) = "Liz"

提前完成

2 个答案:

答案 0 :(得分:2)

您可以为字符串数组编写扩展方法,如下所示:

Public NotInheritable Class ArrayExtensions
    Private Sub New()

    End Sub

    <System.Runtime.CompilerServices.Extension> _
    Public Shared Sub Add(Of T)(theArray As T(), t As T)
        Dim newSize As Integer = theArray.Length + 1
        Array.Resize(theArray, newSize)
        theArray(newSize - 1) = t
    End Sub
End Class

然后你可以这样称呼它:

Dim SomeArray(5) as String
SomeArray.Add(SomeElementAsString)

不幸的是,虽然这可以满足您的使用需求,但数组不是引用,因此在扩展方法中完成的更改会被删除,因为它只是在处理副本。这就是为什么大多数人会建议使用List(Of T),因为它内置了基于引用的Add方法,但您不希望如此,因此您只有这样的选项:

Public NotInheritable Class ArrayUtilities
    Private Sub New()

    End Sub

    Public Shared Sub Add(Of T)(ByRef theArray As T(), t As T)
        Dim newSize As Integer = theArray.Length + 1
        Array.Resize(theArray, newSize)
        theArray(newSize - 1) = t
    End Sub
End Class

以下是使用上述代码的方法:

Dim SomeArray(5) as String
ArrayUtilities.Add(SomeArray, SomeElementAsString)

答案 1 :(得分:0)

我有Finnaly找到它。所以这是交易...

为了实现这一点,我们需要创建一个对象名为Employee的类。 Employee的成员如Name作为字符串......以及作为字符串的部分......

将其视为具有名称的公司中的员工..并且在单独的部分中工作..

代码在这里:

Public Class Employee

    Public Property Name As String
    Public Property Section As String
End Class

当然是阵列的事情。在这个例子中,我们将创建一个可以容纳雇员类型的不同对象的数组。为此,我们将创建一个我们将调用EmployeeCollection的类。当然,在该类中,我们需要一个包含变量的字段,该变量包含employee(1)类型的对象数组 现在,对于我想要添加项目的方法,我使用employee(2)类型的参数编写了子AddItem。

Public Class EmployeeCollection
    Public Items As Employee() = {}                '(1)
    Public Sub AddItem(item As Employee)           '(2)
        ReDim Preserve Items(Items.Length)
        Items(Items.Length - 1) = item
    End Sub
End Class

现在建立并使用这段代码,我在Module1中创建了一个consoleapplication 我在Sub Main中键入了我的代码。

在那个子主中我们必须声明一个对象类型employeeCollection的变量。 这是必需的,因此我们可以作为Items()数组访问AddItem asswell。在这种情况下,我称之为anCollection(3)。

在我们可以添加一些Employee类型的对象之前我们需要首先创建它们。 这就是我创造employee1和employee2的原因。请注意,with .name和.section将填写Employee(4)类的成员。

然后就是时候调用anCollection和一个项目了。 我添加了其中两个。

然后最后一项任务是查看数组中的内容。如果你看起来很好,你可以看到对象存储在公共字段中的项目

所以我们需要通过对象anCollection来调用它。如果我们运行这个..我们会看到所有对象都添加到列表中。

Module Module1
    Sub Main()

        Dim anCollection As New EmployeeCollection()        '(3)


        '(4)
        Dim employee1 As New Employee With {.Name = "John", .Section = "Reception"}
        Dim employee2 As New Employee With {.Name = "Maria", .Section = "Catering Services"}

        anCollection.AddItem(employee1)
        anCollection.AddItem(employee2)
        Console.WriteLine(anCollection.Items(0).Name & " " & anCollection.Items(0).Section)

        Console.WriteLine(anCollection.Items(1).Name & " " & anCollection.Items(1).Section)

        Console.ReadLine()




    End Sub
End Module

这就是我需要的......如果你不想使用列表

,那就太好了

当然它更容易使用列表...但是如果你想以自己的方式做到这一点怎么办?用这个和平fosa