C++ array<String^> Methode "ForEach" in .NET

Blubberbernd

Cadet 4th Year
Registriert
Juli 2009
Beiträge
94
Hallo Zusammen,

schonmal im Vorraus bin für jede Hilfe und Muse dankbar sich das hier durchzulesen :D

Ich habe ein kleines Problem mit der Verarbeitung eines "array<String^>" unter C++ .NET.

Das Array ist gefüllt mit vollständigen Dateinamen.
Jede Datei im Array soll geöffnet werden und dann nach bestimmten Schlüsselwörtern durchsucht werden.

Die Klasse array stellt mir eine Methode "ForEach" bereit, die laut MSDN-Hilfe das macht:

"Performs the specified action on each element of the specified array."

Nur habe ich leider keine Ahnung wie ich diese Methode korrekt verwende da ich mir auf die Beschreibungder Methode keinen Reim machen kann:

"
public:
generic<typename T>
static void ForEach (
array<T>^ array,
Action<T>^ action
)

"

Der erste Parameter wird wohl das array sein mit dem für jedes Element eine Aktion ausgeführt werden soll, nur was ist die "Action<T>^ action" ???

Die weitere Beschreibung in der Hilfe hat mir keineswegs weitergeholfen:

"
generic<typename T>
public delegate void Action (
T obj
)

"

Mein Versuchsquelltext dazu ist:

"
files_array = Directory::GetFiles(cs_path,"*.cs",SearchOption::AllDirectories);
files_array->ForEach(files_array,testen(files_array));


void testen(array<String^>^ Blubb)
{
int i=0;
}

"

Zum schluss noch die Fehlerbeschreibung nach dem Kompilieren:

"
error C2784: 'void System::Array::ForEach(cli::array<Type,dimension> ^,System::Action<T> ^)' : could not deduce generic argument for 'System::Action<T> ^' from 'void'
"

Das Googeln nach Beispielen hat mich nicht weiter gebracht.

So nun meine Frage: "Wie verwende ich die Methode richtig?"
 
Versuch es mal damit:

Code:
// die Methode:
void testen(String Blubb)
{
int i=0;
}

// die Anwendung:
string[] files_array = Directory::GetFiles(cs_path,"*.cs",SearchOption::AllDirectories);
files_array->ForEach(files_array, new Action<String>(testen));
 
Also soweit ich das sehe, verwendet man das wohl so:

Code:
foreach(sting some_string in our_array)
{
//do something
}

D. h. meiner Meinung nach durchläuft die Schleife das Array bis zum Ende (bzw. auf den 1. Platz hinter dem Ende), was dann zu einem Abbruch der Schleife führt.

files_array->ForEach(files_array, new Action<String>(testen));
sollte hier äquivalent funktionieren.

Ich kenne mich aber mit .NET nicht aus. Daher kann dies auch absolut falsch sein.

Gruß,

badday
 
Hallo,


@Rossibaer:

diese Verwendung der Methode funktioniert wohl auch nicht so richtig, anscheinend möchte er ander Parameter, oder die in anderer Form

@baddy:

mit der Schleifenanweisung hab ich es auch schon versucht das hat er ohne Probleme genommen, das Ergebnis ist wahrscheinlich auch identisch, es führen ja viele Wege nach Rom.

Danke erstmal soweit.
Weitere Hinweise wie eine Action<T>^ action richtig verwende wär super.
 
Hast du auch die Methode selbst so geändert wie ich es gepostet hatte?

Ich sehe das da in der Hilfe jeweils nach dem Typ immer ein "^" Zeichen ist.
 
Zuletzt bearbeitet:
Ja ich habe es geändert, da das "^" soweit ich das verstanden habe eine eigenart von .NET ist und irgendwie mit managed code zusammenhängt.

Trotzdem gabs ne Fehlermeldung.

Ich hab das Problem jetzt einfach mit einer "for each"-Schleife gelöst, was baddy auch schon vorgeschlagen hat.

Das mit der <Action^> hab ich aber immernoch nicht verstanden.

Ich denk mal das Thema kann geschlossen werden und danke für die Hilfe!
 
Zurück
Oben