Let’s look at this from a practical angle.
For better or worse, signed int
s are the normal sort of int
s in use in .NET. It was also normal to use signed int
s in C and C++. So, most variables are declared to be int
rather than unsigned int
unless there is a good reason otherwise.
Converting between an unsigned int
and a signed int
has issues and is not always safe.
On a 32 bit system it is not possible for a collection to have anywhere close to 2^^32 items in it, so a signed int
is big enough in all cases.
On a 64 bit system, an unsigned int
does not gain you much, in most cases a signed int
is still big enough, otherwise you need to use a 64 bit int
. (I expect that none of the standard collection will cope well with anywhere near 2^^31 items on a 64 system!)
Therefore given that using an unsigned int
has no clear advantage, why would you use an unsigned int
?