가 자동 코드 컨버터를 잊어 버려, 그들이 자주 변환에서 실수를, 그들은 전체가없는 경우 특히 :
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 코드가 잘못되었다고 생각합니다.
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가 플래그 열거하지, 그래서 '이 아니라'작업은 하나의 언어에서 의미있는 결과를 생성하지 않습니다 : 코드는 다음 C# 코드처럼 실행합니다. 메시지 상자의 텍스트를 보면 VB에서
VarType(ItemValues(i)) <> VariantType.Array
,
Information.VarType(ItemValues[i]) != VariantType.Array
이라는 올바른 조건이됩니다.
VB 6 호환성 기능을 피하면 if (!(ItemValues[i] is Array))
을 쓸 수 있습니다.
C#에서 VB 6 호환성 기능을 계속 사용하여 이식을 쉽게하려면 Microsoft.VisualBasic.dll에 대한 참조를 추가해야합니다.
감사합니다. Joshua. 이 작품! 하지만, txtSubValue.Text = obj 뒤에 .ToString()을 추가해야했습니다. – Charp