UserProfileManager is actually enumerable
I was looking for a way to get a list of all user profiles within Sharepoint 2007. The UserProfileManager only has functions to retrieve a single user, but no function that retrieves all users.
The solution is simple, although a bit hard to see: UserProfileManager implements IEnumerable, and it already contains all user profiles!
So you can just do this here:
using Microsoft.Office.Server; using Microsoft.Office.Server.UserProfiles; ServerContext ctx = ServerContext.GetContext(SPContext.Current.Site); UserProfileManager upm = new UserProfileManager(ctx); foreach (UserProfile u in upm) { DoStuffWith(u); }
to iterate through all profiles.
Thanks for this. What a horrible way to design a class. Not discoverable at all!
It does not implement IEnumerable. It just meets requirements to be placed inside foreach loop, so you, for example, can not past it to a function as IEnumerable...
"A type C is said to be a collection type if it implements the System.Collections.IEnumerable interface or implements the collection pattern by meeting all of the following criteria:
C contains a public instance method with the signature GetEnumerator() that returns a struct-type, class-type, or interface-type, which is called E in the following text.
E contains a public instance method with the signature MoveNext() and the return type bool.
E contains a public instance property named Current that permits reading the current value. The type of this property is said to be the element type of the collection type."
Cheers