在C#中创建消息时,我已经做了类似的事情。
ByteMessage[i] = "A"
ByteMessage[++i] = "B"
ByteMessage[++i] = "C"
......................
我想在VB.NET中实现这一点,除了VB.NET不支持++
或--
运算符。我尝试过像
ByteMessage(i += 1) = "A"
ByteMessage(i += 1) = "B"
ByteMessage(i += 1) = "C"
......................
但这似乎不起作用。 MATH
库似乎没有任何内容可供使用。
在VB.NET中有没有像C#那样的干净解决方案?
答案 0 :(得分:3)
.Net中没有固有的东西支持前/后递增和返回功能。 C#编译器在编译代码时通过发出必需的IL语句来支持它。虽然VB.Net语言开发人员认为不需要此功能,但没有什么可以阻止您使用Extension Methods添加此功能。
唯一的限制是您需要为扩展方法使用有效的方法名称(例如IncrPre
或IncrPost
)并使用方法表示法而不是++i
或{{1记谱法。
i++
使用示例:
Public Module Int32Extensions
<Extension()>
Public Function IncrPost(ByRef i As Int32) As Int32
Dim ret As Int32 = i
i += 1
Return ret
End Function
<Extension()>
Public Function IncrPre(ByRef i As Int32) As Int32
i += 1
Return i
End Function
End Module
的产率:
答案 1 :(得分:0)
您仍然可以在括号内做您需要做的事情。您可以创建一些已经提到的扩展,创建一个函数来为您执行返回所需值的函数,或直接在括号内完成,而无需任何函数或扩展。
下面的替代解决方案没有单独的功能,新的扩展等...
Dim i As Int32 = 0
Dim ByteMessage As String() = New String(0 To 5) {}
Dim CharLetters As Char() = {"A", "B", "C", "D", "E", "F"}
ByteMessage(If(Integer.TryParse((CStr(i)), i), i, 0)) = CharLetters(i)
ByteMessage(If(Integer.TryParse((CStr(i + 1)), i), i, 0)) = CharLetters(i)
ByteMessage(If(Integer.TryParse((CStr(i + 1)), i), i, 0)) = CharLetters(i)
ByteMessage(If(Integer.TryParse((CStr(i + 1)), i), i, 0)) = CharLetters(i)
MessageBox.Show(String.Join(Environment.NewLine, ByteMessage))
i = 4
ByteMessage(If(Integer.TryParse((CStr(i)), i), i, 0)) = CharLetters(i)
ByteMessage(If(Integer.TryParse((CStr(i + 1)), i), i, 0)) = CharLetters(i)
MessageBox.Show(String.Join(Environment.NewLine, ByteMessage))