[C#] Collection-Elemente durch Methodenaufruf verändern

Heute benötigte ich eine Methode, um jedes Element einer generischen Collection des Typs ICollection<MeineKlasse> in eine andere zu überführen. In meinem Fall wollte ich als Ergebnis einfach eine neue Collection<string> haben.

Die Einzelelemente konnten durch einfachen Aufruf der Methode ToString() überführt werden. Allerdings habe ich in .NET 3.5 keine solche Methode gefunden, daher habe ich selbst eine Extension Method geschrieben:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections.Specialized;
  6. using Microsoft.SharePoint;
  7. using System.Collections;
  8.  
  9. namespace MyMethods
  10. {
  11. public static class FieldHelper
  12. {
  13. public static ICollection<U> CreateCollectionFromMethodInvoke<T, U>(this ICollection<T> collection, Func<T, U> method)
  14. {
  15. List<U> result = new List<U>();
  16. foreach (T element in collection)
  17. {
  18. result.Add(method(element));
  19. }
  20. return result;
  21. }
  22. }
  23. }

Verwendung

Mit folgendem Aufruf kann diese Extension Method verwendet werden:

  1. List<MeineKlasse> liste = new List<MeineKlasse>();
  2. foreach (string s in liste.CreateCollectionFromMethodInvole(i => i.ToString()))
  3. {
  4. Console.WriteLine(s);
  5. }