Entwickler-Ecke
C# - Die Sprache - Array.Find
kostonstyle - Mi 18.08.10 09:38
Titel: Array.Find
Hallo miteinander
habe eine Frage zu Array.Find, und die Definition sieht so aus
C#-Quelltext
1:
| public static T Find<T>(T[] array, Predicate<T> match); |
Predicate ist ein delegate und kann nur ein parameter mitgegeben.
C#-Quelltext
1:
| public delegate bool Predicate<in T>(T obj); |
Ich versuche mit Array.Find Befehl ein Objekt zu finden, das ganze sieht so aus.
C#-Quelltext
1: 2: 3: 4: 5:
| foreach (FileInfo file_desti in files_desti) { FileInfo file_source = Array.Find(files_source, FindFile);
} |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private bool FindFile(FileInfo file) { if (file.Name == ) { return true; } else { return false; } } |
Damit möchte ich es herrausfinden, ob das Objekt file_desti in files_source vorhanden ist, files_source ein Array von Typ FileInfo. Bei der Delegate Predicate kann man nur ein Parameter miteinander, man kann also nichts vergleichen. Muss ich daher den Delegate überschreiben?
Gruss kostonstyle
Greenberet - Mi 18.08.10 09:50
Du hast den falschen Ansatz.
Dein "Predicate" wird für jedes Element in dem Array aufgerufen. In deiner Funktion sagst du dann "Das ist das gesuchte Element" ( return true) oder nicht.
Also wenn du wirklich so arbeiten willst, müsstest du eine Member Variable verwenden und diese in deiner Funktion überprüfen.
Ich persönlich würde einfach 2 foreach Schleifen verwenden.
kostonstyle - Mi 18.08.10 09:59
Delegate Predicate man kann also nicht aufmotzen? Wenn das so ist, dann löse ich mit Membervariable.
vielen dank kostonstyle
Th69 - Mi 18.08.10 10:21
Alternativ kannst du anonyme Methoden bzw. Lambda-Ausdrücke direkt benutzen (dort kannst du dann auf lokale Variablen zugreifen):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| foreach (FileInfo file_desti in files_desti) { FileInfo file_source = Array.Find(files_source, delegate(FileInfo fi) { return fi.Name == file_desti.Name; } );
fi => fi.Name == file_desti.Name ); } |
(ich hoffe, ich habe jetzt keinen Syntaxfehler hier reingebaut -)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!