データのパケットを構成するために16進数の文字列を返す次の関数がありますが、値はバイト、UShort、Integer、Single、Stringのいずれかです。Vb.net汎用関数は型を変換できませんT
Public Function GetWriteString(ByVal op As Operation, ByVal value As UShort) As String
Dim dataString As String = DATA_CONST & WRITE_CONST & op.ToString(Operation.Accessibility.WRITE) & ToHex(value)
Dim byteCount As String = ToHex(GetByteCount(dataString))
Return headerString & byteCount & CRC_Module.HeaderCRC(headerString & byteCount) & dataString & CRC_Module.DataCRC(dataString)
End Function
が、私はそれが常に同じであるため、一般的な機能の関数を作りたい、唯一の違いは、ToHex(value)
部分があります。 ToHex
関数は、上記で指定した各データ型のオーバーロードされた関数なので、値に応じて異なる文字列を返します。 公開機能ToHex(バイトとして進)文字列として:型の値Iは、関数は汎用的にしようとすると
Public Function GetWriteString(Of T)(ByVal op As Operation, ByVal value As T) As String
Dim dataString As String = DATA_CONST & WRITE_CONST & op.ToString(Operation.Accessibility.WRITE) & ToHex(value)
Dim byteCount As String = ToHex(GetByteCount(dataString))
Return headerString & byteCount & CRC_Module.HeaderCRC(headerString & byteCount) & dataString & CRC_Module.DataCRC(dataString)
End Function
それにはアクセス可能 『ToHex』はこれらの引数で呼び出されることができませんので、オーバーロードの解決に失敗しました」と言いますオーバーロードされたToHex
関数のそれぞれについて、 'T'を 'Byte'に変換することはできません。この関数を一般的にする方法はありますか?もしそうなら、これを最善の方法としていますか、関数のパラメーターに明示的に5つの異なる関数を作成する必要がありますか?
ToHex機能:
Public Function ToHex(ByVal characters As String) As String
' Variables
' byteArray - An array of bytes used to hold the characters which were converted to bytes
Dim byteArray As Byte() = defaultEncoding.GetBytes(characters)
' Converts the byte array to a string of hex values
Return BitConverter.ToString(byteArray).Replace("-", "")
End Function
Public Function ToHex(ByVal hex As Byte) As String
Return hex.ToString("X2")
End Function
Public Function ToHex(ByVal word As UShort) As String
Return word.ToString("X4")
End Function
Public Function ToHex(ByVal int As Integer) As String
Return int.ToString("X8")
End Function
''' <summary>
''' Converts a float to a string of hex bytes
''' </summary>
''' <param name="float">A float value to be converted</param>
''' <returns>A string of hex bytes</returns>
Public Function ToHex(ByVal float As Single) As String
' Variables
' byteArray - An array of bytes used to hold the bytes that make up the floating point
Dim byteArray = defaultEncoding.GetBytes(float)
' Reverses the byte array
Array.Reverse(byteArray)
' Converts the byte array to a string of hex values
Return BitConverter.ToString(byteArray).Replace("-", "")
End Function
私は種類ごとに独自の過負荷を考えますより明確で維持可能なアプローチになります。 – Fabio
ToHexとは何ですか?それは組み込み関数なのか、それともあなたが書いたものなのでしょうか?それを一般的なものにするか、単に 'Object'を受け入れるようにする必要があります。ここでジェネリックを使用することはすべて便利だとは思いません。 – sstan
ジェネリックを引き続き使用する場合、ToHexメソッドは、渡される型を決定するために 'If'または' Select'文を使用する必要があります。 – Fabio