【问题标题】:Subtracting from a UInt in VB.Net从 VB.Net 中的 UInt 中减去
【发布时间】:2012-02-05 00:12:21
【问题描述】:

我有一个需要将UInt 作为参数的函数。 I'm using the .Net Micro Framework

作为一个简单的例子,我想做这样的事情:

        Dim x As UInteger
        For x = 0 To 100
            Port.SetDutyCycle(x)
            Thread.Sleep(10)
        Next
        For x = 100 To 0 Step -1
            Port.SetDutyCycle(x)
            Thread.Sleep(10)
        Next

第二个For 不能编译为-1 不能表示为UInt。所以接下来我尝试了...

        For y As UInteger = 0 To 100
            Port.SetDutyCycle(100 - y)
            Thread.Sleep(10)
        Next

这不会编译,因为- y 强制转换为 Long,然后不能缩小为 UInt。下次尝试:

            Port.SetDutyCycle(DirectCast(100 - y, UInteger))

100 - y 不会编译为“'Integer' 类型的值无法转换为 'UInteger'”

那么...我怎样才能轻松地获得一个循环从 100 递减到 0 的 UInteger?

根据 Hans Passant 的回答,第二个代码块在 vanilla .Net 中完美运行

【问题讨论】:

    标签: vb.net types type-conversion .net-micro-framework


    【解决方案1】:

    您只是忘记声明 y。修复:

        For y As UInteger = 0 To 100
            Port.SetDutyCycle(100 - y)
            Thread.Sleep(10)
        Next
    

    生成警告是因为您有非标准的编译设置。项目+属性,编译选项卡,警告配置部分。 “隐式转换”选项的正常设置是无。将其设置为警告很好,您只需明确转换即可:

            Port.SetDutyCycle(CUInt(100 - y))
    

    【讨论】:

    • 在 VS 中尝试一下 - 第 2 行 Implicit conversion from Long to UInteger 上有一个警告。我正在使用可能导致问题的 .Net Micro Framework?我会在 vanilla .Net4 中尝试一下
    • 嗯,它在原版 .Net4 中确实有效 - 抱歉,我认为这并不重要。我会更新Q
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    相关资源
    最近更新 更多