get the solution

Blog

Martin Martin
27.04.2009 12:23

Nützliche LINQ Extensions - Enum2List, List2ObservableCollection



Hier ein paar allgemeine brauchbare Extensions:

Enum2List Extension

Konvertiert einen Enum Typ in eine Liste. Die orginale Methode habe ich von dieser Seite entnommen. Ich habe ledeglich den this Parameter hinzufügen müssen.

public static List<T> EnumToList<T>(this List<T> t)
	{
	    Type enumType = typeof(T);
	    if (enumType.BaseType.Equals(typeof(Enum)))
	        return new List<T>();
	    Array enumValArray = Enum.GetValues(enumType);
	    List<T> enumValList = new List<T>(enumValArray.Length);
	    foreach (int val in enumValArray)
	        enumValList.Add((T)Enum.Parse(enumType, val.ToString()));
	    return enumValList;
	}
Den Enum kann man wie folgt in eine Liste konvertieren.

	List<EnumType> m = new List<EnumType>().EnumToList();
	
	
List2ObservableCollection Extension

Wenn man mit WPF arbeitet sind ObservableCollections von Vorteil. Wenn man eine Linq Abfrage macht gibt es nur die Möglichkeit das Ergebnis in eine Liste zu speichern. Mit folgendem Code kann man eine Collection in eine ObservableCollection umwandeln.

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> collection)
	{
	    ObservableCollection<T> observableCollection = new ObservableCollection<T>();
	    foreach (var x in collection)
	    {
	        observableCollection.Add(x);
	    }
	    return observableCollection;
	}
Rekursion in Linq

Ist oder kann eine Klasse wie ein Baum aufgebaut werden, muss man das Objekt rekursiv durchlaufen, um alle Werte zu erhalten. Mit einer Extension kann man auch mit Linq Bäume durchsuchen.

Siehe dazu folgende Seite: http://mutable.net/blog/archive/2008/05/23/using-linq-to-objects-for-recursion.aspx

NotifyPropertyChanged Extension

Properties welche die NotifyPropertyChanged Funktion aufrufen übergeben normalerweise den Propertienamen als einen hardcoded string. Das ist nicht nur unschön sondern auch lästig, wenn man ein Refactoring durchführt.

Folgende Extension schafft abhilfe:

public static string GetMemberName<TEntity, TProperty>(this TEntity instance, Expression<Func<TEntity, TProperty>> projection)
{
    return ((MemberExpression)projection.Body).Member.Name;
}

Sie wird wie folgt angewendet:
private object _Propertyname;
	public object Propertyname
	{
	    get
	    {
	        return _Propertyname;
	    }
	    set
	    {
	        _Propertyname = value;
	        NotifyPropertyChanged(this.GetMemberName(x => x.Propertyname));
	 
	    }
	}


Schlüsselwörter: LINQ, C#, List2ObservableCollection, Enum2List
zuletzt geändert: 31. Mai 2009 19:25
Link zu diesem Artikel: (in die Zwischenablage)





(c) 2011 | Impressum |

| Empfehlenswerte Blog Einträge