2017-02-06 5 views
1

オブジェクトからメソッドに送信された変数からデータを取得するためにリフレクションを使用しようとしていますが、次のエラーが発生します: "オブジェクト参照がオブジェクトのインスタンスに設定されていません。C#リフレクションでNullRefferenceExceptionがスローされる

コード:私はデバッグしようとしているよう

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; 
    } 
} 

問題は、5行目で発生する、と私は時計に入力を入力すると、私はこれを取得: Debug watch

入力にはこれら2つのメンバーが含まれていますが、何らかの理由で「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。例外。このエラーの原因は何ですか?

+1

"UserName"という名前のプロパティを取得しようとしています。 「ユーザー名」にする必要があります。 –

+0

'GetProperty()'は、その名前の(public)プロパティがオブジェクト内に見つからなかった場合に 'null'を返します。だから、 'UserName'のスペルは正しいのでしょうか(大文字小文字を区別します!) –

+0

はい、UserNameからUsernameに変更しましたが、それでも問題は解決しません。 –

答えて

0

だから、最初にあなたはここに入力ミスがあります:GetProperty("UserName")。プロパティは、より低いn資本ではありません。

第2に、キャスティングを使用しないでください。

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); 
} 

いずれにしても、なぜ新しいInputAccountがあるのですか?キャストされたinput(今はauth)を使用できませんか?

+0

キャスティングを使用して問題を解決しました。どうもありがとうございました! –

+0

私は、入力が正しい情報を送信したかどうかをテストするために使用しました。私はさらにそれを使用しません。 –

+0

@SimaTudor嬉しいです。これが正解であれば、それを受け入れることを忘れないでください。 http://stackoverflow.com/help/someone-answers –

関連する問題