[英]Translate this C# comparison to VB.NET
我正在嘗試翻譯兩個Nullable(Of Byte)
對象之間的比較:
public byte?[] header { get; private set; }
public override bool Equals(object other)
{
// ... more code to translate
if (this.header != otherType.header) return false;
// ... more code to translate
}
在線代碼翻譯器為我提供了以下等效功能:
Private m_header As Nullable(Of Byte)()
Public Property header() As Nullable(Of Byte)()
Get
Return m_header
End Get
Private Set(value As Nullable(Of Byte)())
m_header = value
End Set
End Property
Public Overrides Function Equals(other As Object) As Boolean
' ... more code translated
If Me.header <> otherType.header Then
Return False
End If
' ... more code translated
End Function
但是我得到這個異常:
沒有為類型“一維字節數組?”定義運算符“ <>” 和“字節的一維數組?”。 使用“是”運算符比較兩種參考類型。
然后,正如該異常的詳細說明所述,我想知道這是否應該是正確的翻譯,因為我不確定:
If Not Me.header Is otherType.header Then
Return False
End If
您可以使用null-coalescing運算符將空字節視為0
:
Public Overrides Function Equals(other As Object) As Boolean
' ... '
Dim otherType = TryCast(other, ActualType)
If otherType Is Nothing Then Return False
If If(Me.header, 0) <> If(otherType.header, 0) Then
Return False
End If
' ... '
End Function
這是一種檢查兩個可空數組是否相等的方法:
If header Is Nothing AndAlso otherType.header Is Nothing Then
Return True
ElseIf Object.ReferenceEquals(header, otherType.header) Then
Return True
ElseIf header Is Nothing OrElse otherType.header Is Nothing Then
Return False
Else
Return header.SequenceEqual(otherType.header)
End If
錯誤消息告訴您確切的操作:
If Not Me.header Is otherType.header Then
Return False
End If
VB.NET中的Is
運算符進行引用比較,就像C#中的==
一樣,用於未重寫它的引用類型( byte[]
是這種類型)。
看起來轉換器由於某種原因而被添加到“偏移”中,而該偏移僅是其開發人員(甚至可能是他們自己)才知道的,因此應該在您將其放在發布結尾處時可以正常工作。
If Not Me.header Is otherType.header Then
Return False
End If
或者(我認為這更具可讀性):
If Me.header IsNot otherType.header Then
Return False
End If
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.