Feedback

C# - LINQ-Erweiterung für eindeutige Liste

Veröffentlicht von am 05.12.2008
(3 Bewertungen)
Diese Erweiterung nimmt eine Liste und ermittelt aus dieser durch Übergabe eines Schlüssels eine Liste mit eindeutigen Werten.

Beispiel:

class Program
{
static void Main()
{
List<Person> personList = new List<Person>
{
new Person{Name = "Gü"},
new Person{Name = "Andrea"},
new Person{Name = "Gü"}
};

List<Person> myUniqueList = personList.Unique(i => i.Name);
}
}

public class Person
{
public string Name { get; set; }
}

Im Ergebnis werden nur eindeutige Werte in Bezug auf den Namen zurückgegeben.
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

using System;
using System.Collections.Generic;
using System.Linq;

namespace gfoidl.Linq
{
	public static class LinqExtensions
	{
		public static List<T> Unique<K, T>(this List<T> inputList, Func<T, K> func)
		{
			#region Input validation
			if (func == null)
				throw new ArgumentNullException("Key selector function cannot be null");

			if (inputList == null)
				return null;

			if (inputList.Count == 0)
				return new List<T>();
			#endregion

			var grp = inputList.GroupBy(func);
			return grp.Select(g => g.First()).ToList();
		}
	}
}

6 Kommentare zum Snippet

Günther Foidl schrieb am 06.12.2008:
Bei einer Bewertung mit 1 wäre die Angabe einer Begründung hilfreich. Oder hat das mit mir zu tun?
Jan Welker schrieb am 06.12.2008:
Ich denke auch, dass eine Begründung angebracht wäre.
Ich finde die schlechte Bewertung nicht gerechtfertigt.
Rainer Hilmer schrieb am 06.12.2008:
Vielleicht kommt die schlechte Bewertung auch durch das fehlerhafte Demo, was ich aber auch für ungerechtfertigt halte. Ich hab's mal korrigiert und um die Ausgabe von myUniqueList erweitert:
class Program
{
static void Main()
{
List<Person> fooList = new List<Person>
{
new Person { Name = "Günther" },
new Person { Name = "Andrea" },
new Person { Name = "Günther" }
};
List<Person> myUniqueList = fooList.Unique(i => i.Name);
foreach (var person in myUniqueList)
{
Console.WriteLine(person.Name);
}

// Verhindert das selbsttätige Schließen des Konsolenfensters.
Console.WriteLine("\nPress any key to terminate the program.");
Console.ReadKey();
}
}

class Person
{
public string Name { get; set; }
}
Rainer Hilmer schrieb am 06.12.2008:
AHA! Spitze Klammern werden hier verschluckt. Dann war dein Demo nicht fehlerhaft, Günther. Ich möchte mich entschuldigen.
Günther Foidl schrieb am 06.12.2008:
Danke Rainer!
Hab das Beispiel jetzt selbst HTML-Encoded (&lt; und &gt;).
hackman schrieb am 15.11.2010:
schon mal die Funktion IEnumerable - Distinct() gesehen?
 

Logge dich ein, um hier zu kommentieren!