我有一个关于创建声明为字符串的变量数组的查询。 以下是我的代码。在调试时,变量没有显示任何值。
需要帮助..
Module Module1
Public Status, PartStat, HomeStat, ClampStat, SldCylStat, PrsCylP1Stat,
PrsCylP2Stat, PrsCylP3Stat, PrsCylP4Stat, PunchStat, SysInProc, Home1,
Home2, Home3, CyclTim, TrqP1Stat, TrqP2Stat, TrqP3Stat, TrqP4Stat,
AngleP1Stat, AngleP2Stat, AngleP3Stat, AngleP4Stat As String
Function AutoReadStatus()
Dim StatArray = {HomeStat, ClampStat, SldCylStat, Home1, PrsCylP4Stat,
PrsCylP2Stat, Home2, PrsCylP3Stat, PrsCylP1Stat, Home3, PunchStat,
AngleP4Stat, AngleP2Stat, AngleP3Stat, AngleP1Stat, TrqP4Stat,
TrqP2Stat, TrqP3Stat, TrqP1Stat}
Status = ReadMultiReg(FormAuto.SP1, "03", "1258", "0013")
For i = 0 To ((Status.Length / 4) - 1)
StatArray(i) = CInt("&H" & Status.Substring(i * 4, 4))
Next
Return Nothing
End Function
End Module
它甚至没有显示上面数组中任何变量的索引..
Label1.Text = Array.IndexOf(StatArray, SldCylStat)
答案 0 :(得分:0)
为数组内的项目指定新值时,为数组内的项目指定新值(双关语)。
这意味着该项目的数组现在引用了您提供的字符串(或者更确切地说,因为您没有选项严格打开而被隐式转换为字符串的整数),并删除了先前引用(在您的公共字段上)。
测试此示例代码,我想您会理解
Public item As String
Sub Test()
Dim array = {item}
Console.WriteLine(array(0) Is item) ' True
array(0) = "new value"
Console.WriteLine(array(0) Is item) ' False
End Sub
您现在可以看到array(0)
引用的另一个对象比item
字段引用的对象
至于如何解决它,你可以传递所有那些字符串ByRef
,方法内部的赋值会反映在它之外,但这将是乏味的。
IMO的“更好”方式是创建一个类型(Class
)来保存所有这些字符串并将该类型的实例传递给您的方法,这样就可以改变同一个现有对象。
快速,做作的例子:
Class SomeType
Property Item As String
End Class
Sub Test(instance As SomeType)
instance.Item = "new value"
End Sub
' Usage
Dim sample As New SomeType
' here sample.Item is Nothing
Test(sample)
' here sample.Item is "new value"