は、彼らがいっぱい持っていない場合は特に、彼らは頻繁に変換中にミスをし、自動コードコンバータを忘れ:
Private Sub oOpcGroup_DataChange(ByVal TransactionID As Integer, ByVal NumItems As Integer, ByRef ClientHandles() As Integer, ByRef ItemValues() As Object, ByRef Qualities() As Integer, ByRef TimeStamps() As Date)
Dim i As Integer
For i = 1 To NumItems
If VarType(ItemValues(i)) And Not VariantType.Array Then
txtSubValue.Text = ItemValues(i)
Else
MsgBox("Data type return error, returned array, expected single item", MsgBoxStyle.Critical, "Data Change Error")
Exit Sub
End If
Next i
Exit Sub
End Sub
これは私がこれまでにしたものです文脈が利用可能(ItemValuesの宣言など)
この場合、元のVBコードは間違っていると思います。コードは、このC#のコードのように実行します:
int i = 0;
for (i = 1; i <= NumItems; i++) {
if ((Information.VarType(ItemValues[i]) & ~VariantType.Array) != 0) {
txtSubValue.Text = ItemValues[i];
} else {
Interaction.MsgBox("Data type return error, returned array, expected single item", MsgBoxStyle.Critical, "Data Change Error");
return;
}
}
しかし、VariantTypeはフラグ列挙型ではないので、「AND NOT」操作は、いずれかの言語で意味のある結果を生成されていません。 メッセージボックスのテキストを参照すると、正しい条件はVBのVarType(ItemValues(i)) <> VariantType.Array
Information.VarType(ItemValues[i]) != VariantType.Array
になります。
VB6互換機能を回避するには、if (!(ItemValues[i] is Array))
と書くことができます。
移植性を向上させるためにC#のVB 6互換機能を引き続き使用する場合は、Microsoft.VisualBasic.dllへの参照を追加する必要があります。
ありがとうございます。これは動作します!私はtxtSubValue.Text = objの後に.ToString()を追加しなければならなかった。 – Charp