0

我想为声明的数组编写一个 .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"

提前感谢

4

2 回答 2

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)
于 2013-09-25T19:35:31.143 回答
0

我找到了它。所以这里是交易...

因此,为了实现这一点,我们需要一个对象名称为 Employee 的类。Employee 有成员,如 Name 作为字符串......和 ​​section 作为字符串......

将其视为一家有名字的公司的员工..并在一个单独的部门工作..

代码在这里:

Public Class Employee

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

当然现在是数组的事情。在此示例中,我们将创建一个数组,该数组可以保存员工类型的不同对象。为此,我们将创建一个名为 EmployeeCollection 的类。当然,在那个类中,我们需要一个包含一个变量的字段,该变量包含一个员工类型的对象数组(1)现在对于我想要添加一个项目的方法,我编写了带有员工类型参数的子 AddItem( 2)。

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 中的 Sub Main 中键入了我的代码。

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

当然,在我们添加一些 Employee 类型的对象之前,我们需要先创建它们。这就是我制作employee1和employee2的原因。请注意,带有 .name 和 .section 的内容填充了 Employee(4) 类的成员。

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

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

所以我们需要通过对象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

于 2013-11-13T01:24:35.270 回答