【发布时间】:2016-03-13 20:12:06
【问题描述】:
我正在努力理解数组并围绕该主题进行阅读,但是当您刚刚开始编程并且没有人可以要求解释时,很多文献并不容易理解。这是我的二维数组:
'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 Studio 提示该错误是因为“无法从这些参数推断类型参数的数据类型。明确指定数据类型可能会更正此错误。” 我无法理解这个错误的含义。请有人可以解释一下,就像在和一个 10 岁的孩子说话一样,或者也许是一个可以帮助我理解这个问题的网站。谢谢
【问题讨论】:
-
我怀疑 find 函数需要一个单维数组。换句话说,它不会搜索您在那里的数组数组。而不是只在 find 参数中使用汽车,而是传入汽车(0)。如果您刚刚开始,我建议您在了解它们的工作原理之前不要使用扩展方法。
-
2D 数组确实代表了很多内置功能的问题(例如 Array 中的某些功能)。甚至 LINQ 也有问题。您应该仅在需要时(即,当效率/内存问题非常重要时)以及不期望以相关方式修改包含的信息时才使用数组。对于其他情况,您应该更好地使用更友好的修改集合(列表、字典等),您可以在其中不受限制地使用 LINQ 方法。还应尽可能避免依赖 2D 集合。
-
Car {Make, Model, Year, Color, Style}这样的类将完全保留一个对象的数据。那么List(Of Car)会比数组更容易使用。你的时间和脑细胞最好花在学习类和列表上,这使得使用和存储对象变得更加容易 -
没有什么是 OP 想做而 VB 做不到的
-
建议 Plutonix 是您应该关注的,而不是旧的(和不太友好的)编程方法。无论如何,请记住数组是非常有用且最有效的集合;所以你可能想在某些情况下使用它们(我确实经常使用它们)。