一位开发者在翻看.NET源代码时,被一段藏在TimeSpan结构体里的注释逗乐了——这段注释悄然把“一年有多长”写成了只有365天甚至364天,而这个错误居然从上一次提交算起,已经默默躺了整整12年。
事情是这样的:程序员Killian Brendel在浏览.NET底层代码时,注意到TimeSpan的注释非常认真地解释道,TimeSpan代表一段时长,可以是正数也可以是负数,内部用毫秒计数。到这里一切正常,注释甚至贴心地说明,因为月份天数从28到31不等,而一年可能包含365天或364天,十年里的闰年数也会有1到3个的浮动,因此TimeSpan并不提供Years()或Months()这类方法。
等等,往回读一句。一年可能包含365天或…364天?稍有常识的人都知道,普通年份是365天,闰年是366天,怎么会出现364天?这不像是深奥的天文学修正,更像是一个胖手指敲错了数字:把6敲成了4。原文的“fat-finger typo”描述得再准确不过——只是打错了一个数字,注释的严谨性瞬间破功。
这个笔误对TimeSpan类本身毫发无伤,因为它真的就只是一个毫秒计数器的包装而已,所有复杂运算都由DateTime相关对象负责。也正是因为不涉及行为逻辑,这条注释从12年前首次提交起就再没被人触碰过,安稳地躺在源码中成为一个冰封的彩蛋。更有意思的是,如果你继续往下翻,还会发现TimeSpan类里至今保留着已经废弃的默认构造函数,以及为了兼容老版.NET甚至Silverlight而留下的编译期钩子。Silverlight这个曾经承载微软流媒体野心的技术,主流浏览器早在2015年就不再支持,2019年后更是没再收到任何更新,2021年正式结束生命周期——而这些代码片段却依然与这个“364天”的注释作伴。
一个手滑引发的数字错误,加上一堆早已被时代抛弃的兼容代码,让这个毫秒包装类意外成了微软代码库里的一段冷幽默。它不会引发任何灾难,但每次被读到,都会让人忍不住会心一笑:严谨如.NET核心库,也有一年364天的魔幻设定。
热门跟贴