I have a simple array of objects:
Contact[] contacts = _contactService.GetAllContacts();
I want to test if that method returns any contacts. I really like the LINQ syntax for Any()
as it highlights what I am trying to achieve:
if(!contacts.Any()) return;
However, is this slower than just testing the length of the array?
if(contacts.Length == 0) return;
Is there any way I can find out what kind of operation Any()
performs in this instance without having to go to here to ask? Something like a Profiler, but for in-memory collections?
There are two
Any()
methods: 1. An extension method forIEnumerable<T>
2. An extension method forIQueryable<T>
I'm guessing that you're using the extension method for
IEnumerable<T>
. That one looks like this:Basically, using
Length == 0
is faster because it doesn't involve creating an iterator for the array.If you want to check out code that isn't yours (that is, code that has already been compiled), like
Any<T>
, you can use some kind of disassembler. Jetbrains has one for free - http://www.jetbrains.com/decompiler/