0
我正在做一些舊的VB代碼轉換爲C#。轉換幾個屬性時出現此錯誤。運營商'!'不能應用於long類型的操作數
「Operator'!'不能應用於long類型的操作數「
這是VB代碼的樣子,希望對此有所幫助。
Public Property Value() As Integer
Get
If (Me.m_Value < 32768) Then
Return Me.m_Value
Else
Return -32768 + (Me.m_Value - 32768)
End If
End Get
Set(ByVal PLCValue As Integer)
Me.m_Value = PLCValue
End Set
End Property
Public Property B0() As Boolean
Get
If ((Me.m_Value And &H1&) = &H1&) Then
Return True
Else
Return False
End If
End Get
Set(ByVal State As Boolean)
If (State = True) Then
Me.m_Value = Me.m_Value Or &H1&
Else
Me.m_Value = Me.m_Value And (Not &H1&)
End If
End Set
End Property
Public Property B1() As Boolean
Get
If ((Me.m_Value And &H2&) = &H2&) Then
Return True
Else
Return False
End If
End Get
Set(ByVal State As Boolean)
If (State = True) Then
Me.m_Value = Me.m_Value Or &H2&
Else
Me.m_Value = Me.m_Value And (Not &H2&)
End If
End Set
End Property
這是轉換它時的樣子。這兩個設置條件是我得到這個錯誤的地方。 The Or |我可以改爲鑄造(int)並且錯誤消失,但在其他情況下不確定如何調整?
public int Value
{
get
{
if ((_value < 32768))
{
return _value;
}
else
{
return -32768 + (_value - 32768);
}
}
set { _value = value; }
}
public bool B0
{
get
{
if (((_value & 0x1L) == 0x1L))
{
return true;
}
else
{
return false;
}
}
set
{
if ((value == true))
{
_value = _value | 0x1L;
}
else
{
_value = _value & (!0x1L);
}
}
}
public bool B1
{
get
{
if (((_value & 0x2L) == 0x2L))
{
return true;
}
else
{
return false;
}
}
set
{
if ((value == true))
{
_value = _value | 0x2L;
}
else
{
_value = _value & (!0x2L);
}
}
}
謝謝!
此轉換器做怪異的東西做的位操作,整數值上的'Not'應該被解釋爲一個按位否定,對此''''是正確的運算符。 –
@MaximilianGerhardt:你應該寫這個答案 - 這是絕對正確的。 –
檢查以下鏈接:https://msdn.microsoft.com/en-us/library/2cwcswt4.aspx,該部分包含:對於數字表達式... –