在C#中,我应该使用uint或int作为永远不应该为负的值吗?

时间:2010-06-03 02:54:57

标签: c# .net-4.0 code-contracts uint32

  

可能重复:
  Should I use uint in C# for values that can’t be negative?

假设MaxValue(大致:))2 ^ 31 vs 2 ^ 32并不重要。 一方面,使用uint似乎很好,因为它是不言自明的,它表明(并承诺?)某些值可能永远不会是负面的。但是,int更常见,演员经常不方便。一个人可以使用int并始终用代码契约补充它(现在每个人都已转移到.Net 4.0,对吗?)标准库确实使用int来表示LengthSize属性,甚至虽然那些永远不应该是消极的。那么,很明显你int大多数情况下uint比{{1}}好,还是更复杂?

如果您发现此问题没有明确说明,请提出问题。

感谢。

编辑:是的,看起来像个傻瓜。但是,还有一个额外的小问题:在这个特殊情况下,当值可能不是负数时,你能给我一个很好的例子来说明如何使用代码契约/断言语句来补充属性/函数吗?

2 个答案:

答案 0 :(得分:3)

请参阅此处查看previous answer

答案 1 :(得分:2)

简短回答是否定的。您可能希望如下实施。

private int _length;
public int Length
{
    get { return _length; }
    set
    {
        if (value < 0)
        {
            throw new InvalidOperationException("Length must be always positive. Please make sure the value is positive value.");
        }
        this._length = value;
    }
}