使用存储在二维数组中的相关数据

我正在努力理解数组并且仔细阅读这个主题,但是当你刚刚开始编程时,大部分的文献都不太容易理解,而且没有人可以要求解释。 这是我的二维数组:

'Declare 2-diensional array of Strings Dim cars(,) As String = New String(,) {{"BMW", "Coupe", "Reg:2015", "5 Door"}, {"Ford", "Focus", "Reg:2015", "3 Door"}, {"Land Rover", "Discovery", "Reg:2014", "5 Door"}, {"Vauxhall", "Astra", "Reg:2014", "3 Door"}, {"SEAT", "Ibiza", "Reg:2013", "5 Door"}} ' Get bounds of the array. Dim bound0 As Integer = cars.GetUpperBound(0) Dim bound1 As Integer = cars.GetUpperBound(1) ' Loop over all elements. For i As Integer = 0 To bound0 For x As Integer = 0 To bound1 ' Get element. Dim s1 As String = cars(i, x) Console.ForegroundColor = ConsoleColor.Green Console.Write(s1 & ", ") Next Console.WriteLine() Next Console.ReadKey() Console.WriteLine("Please enter the name of the record you wish to view") Dim s = Console.ReadLine() Dim value As String = Array.Find(cars, Function(x) (x.StartsWith(s))) Console.WriteLine(value) Console.ReadKey() 

这是导致问题的线路

 Dim value As String = Array.Find(cars, Function(x) (x.StartsWith(s))) 

Visual Studiobuild议错误是因为“无法从这些参数中推断出types参数的数据types,明确指定数据types可能会纠正这个错误。 我不知道这个错误是什么意思。 请有人可以解释,就像谈到一个10岁或者也许可以帮助我理解这个问题的网站。 谢谢

关键在于数据相关的。 而不是把你的“汽车”分解成不同的arrays,一个Class可以让你创build一个Car对象,并把各种汽车存储在一个types化的List

五分钟介绍ClassesLists

 Public Class Car Public Property Id As Int32 Public Property Make As String Public Property Model As String Public Property Year As Int32 '... etc End Class 

现在你有一个容器来保存一辆车的所有信息。 这就像一个Car对象的蓝图。 一个类还可以包含方法( SubFunction )来pipe理他们存储的数据,以便与汽车或员工或订单相关的一切都可以由该类来pipe理。

 Dim c As New Car ' create a new car object c.Make = "Mazda" c.Model = "Miata" c.Year = 2013 

或者在声明时进行初始化:

 Dim c As New Car With {.Make = "Mazda", .Model = "Miata" ...} 

现在,新千年版本的数组,是一个List 。 由于它们的大小,这些工作要容易得多

 Dim Cars As New List(Of Car) 

Cars集合只能存储汽车对象,它存储的每辆汽车都将数据保存在一起。 还有很多其他的集合types,比如你最终想要熟悉的Dictionary 。 将马自达添加到列表中:

 ' c is the car object created above Cars.Add(c) 

与数组不同,你不需要知道你将会使用多less辆汽车,因为他们自己resize。 为了引用一个, Cars(n)将引用一个汽车对象:

 ' n is the index of a car in the list Dim str = Cars(n).Make & " is " & Cars(n).Color 

使用临时Carvariables重复列表:

 For Each c As Car In Cars ' c will be Cars(0), Cars(1) etc as we step thru Console.WriteLine("Index {0} is a BEAUTIFUL {1} {2}", Cars.IndexOf(c), c.Year, c.Model) ' eg ' "Index 4 is a BEAUTIFUL 2015 Camry" Next 

find一种或第一种:

 Dim myCar = Cars.FirstOrDefault(Function (f) f.Make = "Mazda" AndAlso f.Year = 2013) 

List(Of T)可以用作一些控件的DataSource

 myDGV.DataSource = Cars 

DataGridView将为Car类中的每个Property创build一个列,并为列表中的每个Car对象添加一行 – 简单!

要么:

 myListBox.DataSource myList.DisplayMember = "Make" myList.ValueMember = "Id" 

用户将在列表框中看到Make (或者你定义的任何东西)。 SelectedValue将是他们select的汽车对象的Id,而SelectedItem将是整个汽车对象。 不需要通过不同的arrays来寻找相关的数据 – 它总是在一个地方。