簡體   English   中英

將此C#比較翻譯為VB.NET

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM