将整数递增一

时间:2018-06-01 14:06:35

标签: vb.net

在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#那样的干净解决方案?

2 个答案:

答案 0 :(得分:3)

.Net中没有固有的东西支持前/后递增和返回功能。 C#编译器在编译代码时通过发出必需的IL语句来支持它。虽然VB.Net语言开发人员认为不需要此功能,但没有什么可以阻止您使用Extension Methods添加此功能。

唯一的限制是您需要为扩展方法使用有效的方法名称(例如IncrPreIncrPost)并使用方法表示法而不是++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

的产率:

enter image description here

答案 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))

enter image description here