Should I use uint in C# for values that can't be negative?

c#, integer

Solution

While strictly you should use `uint` for variables that hold non-negative integer you have come across one of reasons why it's not always practicable.

In this case I don't think the reduction in readability that comes with having to do casts is worth it.

Problem

I have just tried implementing a class where numerous length/count properties, etc. are `uint` instead of `int`. However, while doing so I noticed that it's actually painful to do so, like as if no one actually wants to do that. Nearly everything that hands out an integral type returns an `int`, therefore requiring casts in several points. I wanted to construct a `StringBuffer` with its buffer length defaulted to one of the fields in that class. Requires a cast too. So I wondered whether I should just revert to `int` here. I'm certainly not using the entire range anyway. I just thought since what I'm dealing with there simply can't be negative (if it was, it'd be an error) it'd be a nice idea to actually use `uint`. P.S.: I saw this question and this at least explains why the framework itself always uses `int` but even in own code it's actually cumbersome to stick to `uint` which makes me think it apparently isn't really wanted.

Original source

Related problems