Vb.net vb2005中数组作为字段成员的正确使用
我通常使用C#,我试图通过让qbasic程序员轻松地使用VB 2005,将其转变为面向对象编程的乐趣 下面是我试图完成的一个极其简化的版本。它成功编译,但卡对象数组中的所有成员都设置为“无”。测试行抛出NullReferenceException。我做错了什么Vb.net vb2005中数组作为字段成员的正确使用,vb.net,arrays,visual-studio-2005,Vb.net,Arrays,Visual Studio 2005,我通常使用C#,我试图通过让qbasic程序员轻松地使用VB 2005,将其转变为面向对象编程的乐趣 下面是我试图完成的一个极其简化的版本。它成功编译,但卡对象数组中的所有成员都设置为“无”。测试行抛出NullReferenceException。我做错了什么 Sub Main() Dim deck1 As New Deck Console.WriteLine("Test: " & deck1.cards(2).face) End Sub
Sub Main()
Dim deck1 As New Deck
Console.WriteLine("Test: " & deck1.cards(2).face)
End Sub
Class Card
Public face As String
Sub New()
face = "Blank"
End Sub
End Class
Class Deck
Public cards(51) As Card
End Class
是的,当您在.NET中创建数组时,数组的每个元素都被设置为元素类型的默认值-对于类,该值为null/Nothing 您需要在使用数组之前填充它(或者期望它充满空引用) 请注意,这与C#中的行为完全相同 编辑:由于目前还没有人实际发布过有效的人口代码,这里是:
Class Deck
Public cards(51) As Card
Public Sub New()
For i As Integer = 0 To cards.Length-1
cards(i) = New Card()
Next
End Sub
End Class
你需要做点什么
For Each currentItem As String in Me.face
currentItem = "Blank"
End
抱歉如果for each的语法不正确,我通常是C#guy。但是最基本的问题是你没有初始化数组中的每个元素。很好地将51设置正确:大多数C#程序员都会将52设置在那里。或者,VB将其设置得如此模糊,这是一个糟糕的工作;)(但是,是的,我不会发现它…)我的希望是使用卡片的空构造函数,但显然它被忽略了。是的,它会被忽略。正如我所说,VB和C都是一样的——创建数组永远不会填充它,你总是会得到默认值。现在我已经关注了足够长的时间,这是有意义的。在声明期间,您永远不能直接或间接初始化字段成员。感谢您的帮助对于v4来说已经太晚了,但是我希望看到为.Net 5中内置的数组中的每个元素自动调用构造函数的选项:可能使用类似于:Public cards(51)的语法作为新卡