I always come across code that uses int for things like .Count
, etc, even in the framework classes, instead of uint.
What's the reason for this?
I always come across code that uses int for things like .Count
, etc, even in the framework classes, instead of uint.
What's the reason for this?
int, in c, is specifically defined to be the default integer type of the processor, and is therefore held to be the fastest for general numeric operations.
UInt32
is not CLS compliant so it might not be available in all languages that target the Common Language Specification. Int32
is CLS compliant and therefore is guaranteed to exist in all languages.
Some old libraries and even InStr
use negative numbers to mean special cases. I believe either its laziness or there's negative special values.
Some things use int so that they can return -1 as if it were "null" or something like that. Like a ComboBox will return -1 for it's SelectedIndex if it doesn't have any item selected.
Another reason for using int:
Say you have a for-loop like this:
for (i = 0; i <= someList.Count - 1; i++) {
// Stuff
}
(though you probably shouldn't do it that way)
obviously, if someList.Count was 0 and unsigned, you would have a problem.
If the number is truly unsigned by its' intrinsic nature then I would declare it an unsigned int. However, if I just happen to be using a number (for the time being) in the positive range then I would call it an int. The main reasons being that:
Are just a few quick thoughts that came to mind.
I used to try and be very careful and choose the proper unsigned/signed and I finally realized that it doesn't really result in a positive benefit. It just creates extra work. So why make things hard by mixing and matching.
UInt32 isn't CLS-Compliant. http://msdn.microsoft.com/en-us/library/system.uint32.aspx
I think that over the years people have come to the conclusions that using unsigned types doesn't really offer that much benefit. The better question is what would you gain by making Count a UInt32?