I have a List of Activity. In the Activity class is an ID property (a Guid for arguments sake). I want to check if this list has an Activity in it with a Guid I have. Rather than this:
foreach(Activity activity in ActivityList)
{
if(activity.Id == GuidToCompare)
//Code here
}
Is there a more efficient way to achieve the same result as I could if I were to have just a list of Guids (instead of a list of Activity's) and to use .Contains()?
I've got a list of a struct called ActivityAndPO. In this struct is a Guid. I have a list of PO's. In the PO class is a Guid.
I want to loop through all of objects in the the ActivityAndPO list where the Guid's exist in the list of PO's.
For those who can't use LINQ:
Sure.
But since
Id
implies there will be at most 1 activity:If you are looking for only one Id one time, there is no more efficient way.
If you are looking for Ids multiple times you can build a HashSet :
If you need to find an instance of activity you can build a Dictionary (works only if Id is unique) :
Others solution using Linq with Where/FirstOrDefault/Any on the Id won't be more efficient than yours.
Just to offer you all the ways you can write this query with
Linq
Now, it is up to you to choose the more readable snippet ;)
Take a look to the LINQ, You can replace with it your code by:
ActivityList.Any(i => i.Id == GuidToCompare);