I have some code where I'm returning an array of objects.
Here's a simplified example:
string[] GetTheStuff() {
List<string> s = null;
if( somePredicate() ) {
s = new List<string>(); // imagine we load some data or something
}
return (s == null) ?
new string[0] :
s.ToArray();
}
The question is, how expensive is the new string[0]
?
Should I just return null and make the caller accept null as a valid way of indicating "nothing was found"?
NB: This is being called in a loop which gets run hundreds and hundreds of times, so it's one of the few cases where I think this kind of optimiziation is not actually 'premature'.
PS: And even if it was premature, I'd still like to know how it works :-)
Update:
Initially when I asked if it used any space, I was thinking of things from the 'C/C++' point of view, kind of like how in C, writing char a[5];
will allocate 5 bytes of space on the stack, and char b[0];
will allocate 0 bytes.
I realise this is not a good fit for the .NET world, but I was curious if this was something that the compiler or CLR would detect and optimize out, as a non-resizeable array of size zero really shouldn't (as far as I can see?) require any storage space.