Using Unsigned Primitive Types大多数时候,我们表示的概念永远不能小于0。例如,为了声明长度,我们写:
该名称很好地表达了其用途,但您可以为其指定负值。 似乎在某些情况下,您可以通过这样编写来更清楚地表达您的意图:
我能想到的一些缺点:
有什么想法吗? "在罗马做到入乡随俗。"
从理论上讲,在适用的情况下使用无符号值是有好处的,因为它使代码更具表现力,但这在C#中根本无法做到。我不确定为什么开发人员最初不设计接口来处理
由于一致性通常很重要,因此我建议您走C#路并使用
第二点是最重要的。通常,您应该只使用 如果递减值为0的带符号数字,该数字将变为负数,您可以轻松地对此进行测试。如果递减值为0的无符号数字,它将下溢并成为该类型的最大值-有点难以检查。
我要指出的是,在C#中,您可以打开
对于内部代码(即,在任何互操作性庄园中不会与其他语言一起引用的代码),我投票赞成在情况许可时使用无符号,例如前面提到的 有符号与无符号辩论中的另一点是,某些程序员使用-1这样的值来表示错误,而这些错误原本就没有含义。我赞成这样一种观点,即每个变量都应仅具有一个目的,但是,如果您(或与您一起编码的同事)喜欢以这种方式表示错误,则使变量保持签名可以使您灵活地在以后添加错误状态。 我认为,除非将uint与int巧妙地结合使用,否则会引起开发人员的困惑,除非将其写入公司的开发人员指南中。 例如,如果长度不能小于零,则应在业务逻辑中清楚地表示它,以便将来的开发人员可以阅读代码并知道真正的意图。 只是我的2美分。 您的两点很好。避免它的主要原因是强制转换。投射使它们难以使用。我曾经尝试使用单符号变量一次,但由于框架方法都使用带符号整数,因此我不得不在所有地方都强制使用强制转换。因此,无论何时调用框架方法,都必须进行强制转换。 |