Entwickler-Ecke

Basistechnologien - Generic List: Index suche verändern


braincom654 - Fr 07.02.14 10:53
Titel: Generic List: Index suche verändern
Hier schnell ein Beispeil Code:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public class Person
  {
    public int ID { get; set; }
    public string Name { get; set; }
    public MyClass2 MyClass2 { get; set; }
  }
  public class Main
  {
    public void Do()
    {
      var collection = new List<Person>();
      var itemOne = collection["Hansi"];
    }
  }


Wie ihr seht habe ich eine Liste von einer Klasse die ich selbst geschrieben habe. Nun möchte ich aber bei der Liste keinen index angeben, sondern beispielsweise einen string angeben der dannn den Namen sucht. Das ist nur ein Beispiel, ich möchte nur das Prinzip verstehen ob das überhaupt möglich ist. Wenn ja, dann wie?
Ich weiß mit linq würde es sehr einfach gehen usw. Aber für meinem Fall muss das auf diese Art und Weise klappen. Bin über jede Anwort froh. Danke.

Moderiert von user profile iconTh69: Titel geändert (Gerneric -> Generic)


Christian S. - Fr 07.02.14 10:57

Hallo!

Du könntest ein Dictionary<string, Person> verwenden. Dabei würde der Schlüssel (also in Deinem Fall "Hansi") aber nicht aus der Eigenschaft "Name" der Klasse bezogen, sondern wäre davon unabhängig.

Viele Grüße
Christian


braincom654 - Fr 07.02.14 11:02

Super schnelle Antwort, danke. :)

Wäre eine Lösung, aber auf mein Projekt leider nicht übertragbar. Habe nur wenig Erfahrung mit Gernerischen Klassen. Ich brauche einfach ein IEnumerable<meineklasse>. Kann ich Selbst so ein IEnumerable schreiben und die Index suche auf anpassen?PS. Wie heißt der Fachausdruck den für list[] diese Funktion? Hilft vielleicht beim googleln weiter. :)


Ralf Jansen - Fr 07.02.14 11:07

Wenn die Signatur zum Suchen in der List so sein soll must du eine Liste schreiben die das kann also von List ableiten, einen passenden Indexer verpassen und dann eben diese anstatt List<Person> verwenden.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public class PersonList : List<Person>
{
    public Person this[string name]
    {
        get
        {
            return this.FirstOrDefault(x => x.Name == name); // gibt nur den ersten zurück der so heißt!!!
        }
    }
}


Ralf Jansen - Fr 07.02.14 11:09

Zitat:
Wie heißt der Fachausdruck den für list[] diese Funktion?


Der Array Operator,ich nenn denn so heißt, heißt Indexer ;)