簡體   English   中英

C# UInt64 減法問題

[英]C# UInt64 subtract issue

為什么 UInt64 數據類型的減法有時會發生錯誤。 我減少時間跨度的秒數,結果應該在 1 - 10 之間,但是系統的結果可以是數百萬甚至數十億? 蟲子?

private bool isReplayRequest(string kode, string rTs)
{
    if (System.Runtime.Caching.MemoryCache.Default.Contains(kode))
    {
        return true;
    }
    
    DateTime eStart = new DateTime(1970, 01, 01, 0, 0, 0, 0, DateTimeKind.Utc);
    TimeSpan cTs = DateTime.UtcNow - eStart;
    var stotalSeconds = Convert.ToUInt64(cTs.TotalSeconds);
    var rTotalSeconds = Convert.ToUInt64(rTs);
    
    if ((stotalSeconds - rTotalSeconds) > maxSeconds)
    {
        return true;
    }
    
    .... etc ....
}

在線問題 (stotalSeconds - rTotalSeconds)

在此處輸入圖像描述

不確定這是您問題的解決方案——只是我的第一個想法

默認情況下,C# 編譯器不檢查算術溢出

在 Visual Studio 中,您可以在項目的屬性、構建部分、高級設置中啟用此選項

推進構建設置

在 Visual Studio 之外,這里是編譯器設置

-checked

或者

<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>

法比奧

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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