2017-02-06 5 views
1

Ich versuche, Reflektion zu verwenden, um die Daten von einer Variablen zu erhalten, die an die Methode als Objekt gesendet wird, und ich habe den folgenden Fehler: "Objektverweis nicht auf eine Instanz eines Objekts festgelegt."C# Reflektion wirft NullReferenceException

Der Code:

public object SendNetworkData(object input, Classes.Macro Command) 
{ 
    if (input is Classes.Authentication) 
    { 
     string Username = input.GetType().GetProperty("UserName").GetValue(input, null).ToString(); 
     string Password = input.GetType().GetProperty("Password").GetValue(input, null).ToString(); 

     Classes.Authentication InputAccount = new Classes.Authentication(Username, Password); 

     return InputAccount; 
    } 
} 

Das Problem entsteht bei Zeile 5, und, wie ich zu debuggen versuchen, wenn ich Eingang in Uhrenart, bekomme ich diese: Debug watch.

Eingang enthält diese zwei Mitglieder, aber aus irgendeinem Grund bekomme ich eine "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt." Ausnahme. Was kann der Grund für diesen Fehler sein?

+1

Sie versuchen, die Eigenschaft "UserName" zu erhalten. Es sollte "Benutzername" sein. –

+0

'GetProperty()' gibt 'null' zurück, wenn eine (öffentliche) Eigenschaft mit diesem Namen nicht im Objekt gefunden wurde. Achten Sie also darauf, dass 'UserName' richtig geschrieben ist (Groß-/Kleinschreibung beachten!). –

+0

Ja, ich habe mich von Benutzername zu Benutzername geändert, aber das Problem wird immer noch nicht behoben. –

Antwort

0

Also, zuerst haben Sie hier einen Tippfehler: GetProperty("UserName"). Das Grundstück ist mit niedriger n kein Kapital.

Zweitens, warum nicht Casting verwenden?

var auth = input as Classes.Authentication; 

if(auth != null) 
{ 
    string Username = auth.Username; 
    string Password = auth.Password; 

    Classes.Authentication InputAccount = new Classes.Authentication(Username, Password); 
} 

Aber in jedem Fall, warum haben eine neue InputAccount? Kannst du das gegossene input (jetzt auth) nicht benutzen?

+0

Das Casting hat das Problem gelöst! Vielen Dank! –

+0

Ich habe das verwendet, um zu testen, ob die Eingabe die richtigen Informationen gesendet hat. Ich werde es nicht weiter benutzen. –

+0

@SimaTudor Froh, dass ich helfen könnte. Wenn dies die richtige Antwort ist, Vergessen Sie nicht, es zu akzeptieren. http://stackoverflow.com/help/someone-answers –

Verwandte Themen