【发布时间】:2018-03-11 22:28:45
【问题描述】:
我正在尝试将 uint 字段从 1 减少到 0。由于 Inc 的工作方式,我必须将其转换为 int,如下所示:
UpdateDefinition<Student> updateDef = Builders<Student>.Update.Inc(s => (int)s.Grade, -1);
GetStudentCollection().UpdateOne(s => s.Id == 12345, updateDef);
当我使用1 而不是-1 递增时,这非常有效,但是当我运行此代码时,我收到以下错误:
System.OverflowException: Value was either too large or too small for a UInt32.
at System.Convert.ToUInt32(Int32 value)
我已从该 LINQ 查询中调试了检索到的 Student,并在尝试递减之前确认 s.Grade 位于 1。由于0 在有效的uint 范围内,我不明白为什么它会这样出错。
我可能会遗漏什么以及如何绕过投射uint? (除了“不要使用 uints”之外的解决方案)
【问题讨论】:
-
你为什么要选角?
-
@AluanHaddad 因为
Inc要求我这样做。它不会接受uint参数。