2017-10-26 1 views
0

Ich weiß, dass wir Funktionen mit ihrem Namen in einem String wie folgt gespeichert anrufen:die Funktionen in einem String Deaktivieren C#

Type thisType = this.GetType(); 
MethodInfo theMethod = thisType.GetMethod(TheCommandString); 
theMethod.Invoke(this, userParameters); 

ihre irgendeine Art und Weise, durch die in C# ich alle Funktionen in denen anrufen Klasse außer der Funktion in einer Zeichenfolge?

Wollen Sie es in der späten Bindung, wie ich Array von Zeichenfolgen, die den Namen der Methoden enthält, die aus der Ausführung verworfen werden müssen.

+1

Verwenden Sie ein 'if/else'? – Amy

+0

Was meinst du 'rufen Sie alle Funktionen in der Klasse außer'? Sie können alle Methodennamen abrufen und denjenigen herausfiltern, den Sie nicht möchten. Fragen Sie, wie man die Namen bekommt, wie man die Methoden aufruft oder wie man die unerwünschten Strings entfernt? –

+4

Sie meinen alle diese Methoden? 'this.GetType(). GetMethods(). Wo (t => t.Name! =" Was auch immer ")'? – DavidG

Antwort

1

Wenn Sie versuchen, Reflexion zu verwenden, um alle Methoden außer ein bestimmter auszuführen, müssen Sie nur alle Methoden zu erhalten und die eine auszuschließen sind (s) Sie nicht interessiert sind. Zum Beispiel eine einzelne Methode auszuschließen Name:

var methods = this.GetType().GetMethods() 
    .Where(t => t.Name != "Whatever"); 

foreach(var method in methods) 
{ 
    method.Invoke(this, userParameters); 
} 

wenn Sie eine Liste von Methodennamen haben, dann müssen Sie nur den Filter ändern, zum Beispiel:

var methodNames = new [] { "Method1", "Method2" }; 

var methods = this.GetType().GetMethods() 
    .Where(t => !methodNames.Contains(t.Name); 
Verwandte Themen