毫秒单位为C#-长还是整数?

毫秒单位为C#-长还是整数?,c#,timespan,C#,Timespan,我和Milisond一起工作,我用得很好 Timeout = (int)TimeSpan.FromMinutes(TimeoutVal).TotalMilliseconds 但是我读到很少有人将其转换为long,而不是int?为什么会这样?我之所以选择强制转换,唯一的原因是它使用的API只允许Int超时(例如Thread.Sleep或Task.Delay),但一般来说,你不应该这样做,除非a)你不介意它是否溢出并导致“意外”行为,或者b)它不应该溢出(比如,你使用的是一个小超时) 在所有其他目

我和Milisond一起工作,我用得很好

Timeout = (int)TimeSpan.FromMinutes(TimeoutVal).TotalMilliseconds

但是我读到很少有人将其转换为
long
,而不是
int
?为什么会这样?

我之所以选择强制转换,唯一的原因是它使用的API只允许Int超时(例如Thread.Sleep或Task.Delay),但一般来说,你不应该这样做,除非a)你不介意它是否溢出并导致“意外”行为,或者b)它不应该溢出(比如,你使用的是一个小超时)

在所有其他目的中,不要铸造。改为双倍储存

要计算可存储在签名int32中的最大小时数(以毫秒为单位):

1s=1000ms

1m=60s

1h=60m

Int32最大值:2147483647

然后:

结果是596.5232小时


无论如何,您不应该使用具有如此高值的超时,而是使用取消令牌。但同样,这取决于您正在使用的API。

totalmillizes
是一个
double
,为什么需要一个整数值?你的问题的答案肯定是因为
int
不够大。你真的这么问吗?@DavidG如果我保持原样(强制转换为int),会发生什么?如果你保持原样,它将在超过600小时的任何时间内失败。如果你的持续时间都没有超过596小时,它就可以正常工作。但问题是:为什么要强制转换?如果双溢出值的大小为(int),那么结果将是一个不可用的int值,而不是一个异常。
int totalSeconds = int.MaxValue / 1000;
int totalMinutes = totalSeconds / 60;
int totalHours = totalMinutes / 60;