Depends how much you like the linq query syntax, you can use the extension methods directly like:
var item = Items.First(i => i.Id == 123);
And if you don't want to throw an error if the list is empty, use FirstOrDefault
which returns the default value for the element type (null
for reference types):
var item = Items.FirstOrDefault(i => i.Id == 123);
if (item != null)
{
// found it
}
Single()
and SingleOrDefault()
can also be used, but if you are reading from a database or something that already guarantees uniqueness I wouldn't bother as it has to scan the list to see if there's any duplicates and throws. First()
and FirstOrDefault()
stop on the first match, so they are more efficient.
Of the First()
and Single()
family, here's where they throw:
First()
- throws if empty/not found, does not throw if duplicate
FirstOrDefault()
- returns default if empty/not found, does not throw if duplicate
Single()
- throws if empty/not found, throws if duplicate exists
SingleOrDefault()
- returns default if empty/not found, throws if duplicate exists
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…