2016-08-06 8 views
0

文字列として宣言された変数の配列の作成に関するクエリがあります。 以下は私のコードです。デバッグ時、変数は値を表示しません。文字列として宣言された変数の配列

ヘルプが必要です。..

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 

それも、アレイ上から任​​意の変数のインデックスを示していません。..

+0

まず、使用[オプション厳密に(https://msdn.microsoft.com/en-us/library/zcd4xwzs(V = VS.100)の.aspx )。新しいプロジェクトのデフォルトとしても設定することをお勧めします。問題を修正したら、それが指摘している、あなたは働くプログラムを持っているかもしれません。 –

+0

AutoReadStatusは、値を返さない(希望しない)場合は、 – Sehnsucht

+0

@ Andrew MortonがOption Strictを設定しようとしたときに、 'Function'ではなく' Sub'でなければなりません。 – Prashant

答えて

0

あなたは、アレイ内の項目に新しい値を代入

Label1.Text = Array.IndexOf(StatArray, SldCylStat) 
新しい値を配列内の項目に割り当てます(意図したpun)。

これは、アイテムの配列があなたが指定したストリング(またはOption Strict Onを持たないので暗黙的にストリングに変換されたInteger)を参照し、先行リファレンス(パブリックフィールド上)が破棄されることを意味します。

テストこのサンプルコードと私はあなたが、それを解決する方法についてはitemフィールド

によって参照される1つ以上array(0)参照になりましyYouを別のオブジェクトを参照することができますが、

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 

を理解することができると思いますこれらの文字列をすべて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" 
関連する問題