gpt4 book ai didi

c# - 减去两个 System.Runtime.InteropServices.ComTypes.FILETIME 对象的最安全方法是什么

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:32 26 4
gpt4 key购买 nike

我想知道减去两个 System.Runtime.InteropServices.ComTypes.FILETIME 对象的最安全方法是什么?我使用了以下代码,但有时由于低 32 位值中的负数,它会给我 ArithmaticOverflow 异常。我不确定用 unchecked 包围正文是否会达到目的。请给我一些关于如何安全地执行此操作而不会收到任何运行时异常或 CS0675 警告消息的建议。

private static UInt64 SubtractTimes(FILETIME a, FILETIME b)
{
UInt64 aInt = ((UInt64)(a.dwHighDateTime << 32)) | (UInt32)a.dwLowDateTime;
UInt64 bInt = ((UInt64)(b.dwHighDateTime << 32)) | (UInt32)b.dwLowDateTime;
return aInt - bInt;
}

最佳答案

您需要使用unchecked 来抑制异常:

    public static long FileTime2Long(FILETIME ft) {
uint low = unchecked((uint)ft.dwLowDateTime);
return (long)ft.dwHighDateTime << 32 | low;
}

static void Test() {
FILETIME ft = new FILETIME();
ft.dwHighDateTime = 1;
ft.dwLowDateTime = -1;
long value = FileTime2Long(ft);
Debug.Assert(value == 0x1ffffffff);
}

如果需要,您可以使用 DateTime.FromFileTimeUtc() 转换为 DateTime。

关于c# - 减去两个 System.Runtime.InteropServices.ComTypes.FILETIME 对象的最安全方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4707379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com