"Schlüsselwort" Dies ist in einer statischen Eigenschaft, einer statischen Methode oder einem statischen Feldinitialisierer nicht zulässig, wenn Methoden zu einem ExpandoObject hinzugefügt werden

8

Ich versuche eine dynamische Methode zu ExpandoObject hinzuzufügen, die die Eigenschaften (dynamisch hinzugefügt) zurückgibt, aber es gibt mir immer einen Fehler.

Stimmt etwas nicht, was ich hier mache?

%Vor%

Der Compiler meldet den folgenden Fehler: Fehler 1

  

Schlüsselwort 'this' ist in a nicht gültig   statische Eigenschaft, statische Methode oder   Statischer Feldinitialisierer

D: \ rnd \ GettingStarted \ DynamicDemo \ ExpandoFun.cs 20 63 DynamicDemo

    
humblecoder 27.12.2010, 07:09
quelle

4 Antworten

8

Nun, Sie verwenden this im Lambda, was sich auf das Objekt bezieht, das Action erzeugt. Sie können das nicht tun, weil Sie sich in einer statischen Methode befinden.

Selbst wenn Sie in einer Instanz-Methode wären, würde es nicht mit this funktionieren, da es sich auf die Instanz des Objekts beziehen würde, das die Action erstellt, nicht die ExpandoObject , wo Sie es verstecken.

Sie müssen auf das ExpandoObject (Student) verweisen:

%Vor%     
R. Martinho Fernandes 27.12.2010, 07:21
quelle
2

Es gibt kein "dies" für Sie.

Erfassen Sie das Objekt, wenn Sie stattdessen das Lambda erstellen:

student.Introduction = new Action( ()=> Console.WriteLine("Hello my name is {0} {1}", student.FirstName, student.LastName) );

Dann funktioniert es.

    
corvuscorax 27.12.2010 07:19
quelle
1

Sie können das Schlüsselwort this nicht in der Aktion verwenden, da sich hier this auf die aktuelle Instanz (nicht Student) bezieht, was den Kompilierungsfehler verursacht, weil der Code in einer statischen Methode ist. Überprüfen Sie dies:

%Vor%

Ausgabe:

%Vor%     
Danny Chen 27.12.2010 07:21
quelle
0

Sie rufen den Aktionscode über die statische Main-Methode auf. Dort können Sie nicht auf Objekteigenschaften zugreifen. Sie müssen es durch

ersetzen %Vor%

z.B.

    
user432219 27.12.2010 07:20
quelle

Tags und Links