2013-09-25 43 views
0

我想为一个声明的数组写一个.Add方法。编写自己的“添加”方法为一个数组

的逻辑是,如果你的代码是这样的:

​​

那你可以调用Add方法,并给起了个名字参数添加元素。 带额外的元素应该加上+1,然后再加上前面的最高索引。 所以在上面的情况......如果你会说:

add(Liz) 

然后输出必须是:

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

Thanx提前

+1

为什么不只是使用列表而不是数组? –

+0

为什么你需要一个数组?你需要能够使用数组语法来访问它吗?像这样Dim x As Integer = myArray(i)'?如果是这样,List(Of T)就是这样工作的。 –

+1

[向阵列添加项目的最快方式]的可能重复(http://stackoverflow.com/questions/18097756/fastest-way-to-add-an-item-to-an-array) –

回答

0

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

所以要做到这一点,我们需要一个对象名称为Employee的类。 员工有像一个名称作为一个字符串的成员...和一个字符串的部分...

看到它作为一个公司的雇员在一个名称..并在一个分开的部分工作..

代码在这里:

Public Class Employee 

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

Ofcourse现在这东西的阵列。在这个例子中,我们将创建一个可以容纳雇员类型不同的对象的数组。为此,我们将创建一个我们将调用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 

我们建立并使用此代码我做了一个consoleapplication,并在模块1 我输入我的代码在Sub为主。

在那个sub main中我们必须声明一个对象类型employeeCollection的变量。 这是需要的,所以我们可以使用AddItem asswell作为Items()数组。在这种情况下,我把它称为集合(3)。

ofcourse之前,我们可以添加一些类型的对象我们需要先创建它们。 这就是为什么我做了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 

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

ofcourse它更容易使用的...列表,但如果你想要的东西这是非常好的以你自己的方式做到这一点?使用这个和平fosa

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) 
相关问题