我应该在C#中使用uint来获取不能为负的值吗?

Joe*_*oey 75 c# integer

我刚才想实现一类其中有大量的长/计数性能等方面都uint代替int.然而,在这样做的同时,我注意到这样做真的很痛苦,就好像没有人真的想要那样做.

几乎所有提出整数类型的东西都会返回int,因此需要在几个点上进行转换.我想构建一个StringBuffer缓冲区长度默认为该类中的一个字段.也需要演员.

所以我想知道我是否应该回到int这里.无论如何,我当然不会使用整个范围.我只是想,因为我在那里处理的根本不能是负面的(如果它是,这是一个错误)实际使用它是一个好主意uint.

PS:我看到了这个问题,这至少解释了为什么框架本身总是使用,int但即使在自己的代码中,它实际上很难坚持,uint这让我觉得它显然不是真正想要的.

Eri*_*ert 58

我还将其他答案添加到使用uint作为公共字段,属性,方法,参数等类型,这违反了公共语言规范规则,并在可能的情况下予以避免.

  • 严格遵循这一点,我被微软烧毁了.事实证明,IntPtr应该有一个uint构造函数. (3认同)
  • 如果他们支持自然数,我也要补充一点,例如,此类型的值是0到6,它们可以消除所有数组边界检查,将性能提高5-10%。 (3认同)
  • @EricLippert 那是你最短最长的“我不知道”之一,不是吗:p (2认同)

Chr*_*isF 41

虽然严格地说你应该使用uint包含非负整数的变量,但是你会遇到一个原因并不总是切实可行的原因.

在这种情况下,我不认为必须进行演员表的可读性降低是值得的.

  • 如果你必须为int创建一个包装器,那么你有更多的可读性问题:) (6认同)
  • 很难说,我不认为演员阵容会降低索引器的可读性,你可以创建一个包装器.而成为负面的整体是痛苦和昂贵的错误. (2认同)