<p>What is the best way to approach removing items from a collection in C#, once the item is known, but not it's index.  This is one way to do it, but it seems inelegant at best.</p>

<pre><code>//Remove the existing role assignment for the user.
int cnt = 0;
int assToDelete = 0;
foreach (SPRoleAssignment spAssignment in workspace.RoleAssignments)
{
    if (spAssignment.Member.Name == shortName)
    {
        assToDelete = cnt;
    }
    cnt++;
}
workspace.RoleAssignments.Remove(assToDelete);
</code></pre>

<p>What I would really like to do is find the item to remove by property (in this case, name) without looping through the entire collection and using 2 additional variables.</p>

If you want to access members of the collection by one of their properties, you might consider using a
```
Dictionary<T>
```
or
```
KeyedCollection<T>
```
instead. This way you don't have to search for the item you're looking for.
Otherwise, you could at least do this:
```
```
foreach (SPRoleAssignment spAssignment in workspace.RoleAssignments)
{
    if (spAssignment.Member.Name == shortName)
    {
        workspace.RoleAssignments.Remove(spAssignment);
        break;
    }
}
```
```