Any and FirstOrDefault - best practice
suggest changeI won’t explain what Any
and FirstOrDefault
does because there are already two good example about them. See https://stackoverflow.com/documentation/c%23/68/linq-queries/5098/any#t=201707200324548979636 and https://stackoverflow.com/documentation/c%23/68/linq-queries/329/first-firstordefault-last-lastordefault-single-and-singleordefault#t=201707200328069088515 for more information.
A pattern I often see in code which should be avoided is
if (myEnumerable.Any(t=>t.Foo == "Bob"))
{
var myFoo = myEnumerable.First(t=>t.Foo == "Bob");
//Do stuff
}
It could be written more efficiently like this
var myFoo = myEnumerable.FirstOrDefault(t=>t.Foo == "Bob");
if (myFoo != null)
{
//Do stuff
}
By using the second example, the collection is searched only once and give the same result as the first one. The same idea can be applied to Single
.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents