Why is Count not an unsigned integer? [duplicate]
Solution 1:
Unsigned integer is not CLS-compliant (Common Language Specification)
For more info on CLS compliant code, see this link:
http://msdn.microsoft.com/en-us/library/bhc3fa7f.aspx
Solution 2:
Mabye because the uint data type is not part of the CLS (common language specification) as not all .Net languages support it.
Here is very similar thread about arrays:
Why is Array.Length an int, and not an uint
Solution 3:
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
?