2017-08-17 77 views
0

変数sourcetargetは、2つの異なるクラスの2つの異なるインスタンスです。しかし、彼らは両方ともIDというintプロパティを持っています。GetValueで取得したデータからSetValueを呼び出すときに "オブジェクトがターゲットタイプと一致しません"

変数tPropおよびsPropは、それぞれのオブジェクトのIDプロパティのオブジェクトです(PropertyInfo)。

sPropは値54を有し、IDEのローカルwindwows obj{int}

tPropが有効性、まだ設定されていないタイプとして示します。

私はこのコードを使用してtarget.IDを設定しようとしています:

var sVal = sProp.GetValue(source); 
tProp.SetValue(target, sVal); 

私はその行を打つとき、私は「オブジェクトがターゲットの型と一致しません」を取得。

は私がintsValをキャストすることによってこの問題を解決できることを知っているが、私はここで、一般的なコードを書くしようとしていると、少なくとも.NETは、2つのオブジェクトがまったく同じタイプであることを決定することができるだろうと思いました。何か不足していますか?

これを解決するにはどうすればいいですか?タイプのチェックやキャスティング以外の方法はありますか?

+0

アスタリスクではなくバッククォート( '\' ')を使用したフォーマットコード。 – Amy

+3

私にとって完璧に動作します。最小の完全な例が必要です。私の例:https://pastebin.com/raw/ZrxEvaTHジェネリックでも:https://pastebin.com/raw/DAqULAj3 – Dispersia

+1

2つの異なるクラスの構造を表示することをお勧めします。 – Sach

答えて

0

あなたはタイプミスなどがあるため、別のオブジェクトに属するプロパティの値を設定しようとしています。以下の行(のspropインスタンスをターゲットに属していない)コメントを解除して問題を再現するには

public class A 
{ 
    public int ID {get;set;} 
} 

public class B 
{ 
    public int ID {get;set;} 
} 

:このような2つのクラスを持つ例えば

var source = new A(); 
    source.ID = 54; 
    var target = new B(); 

    var sProp = source.GetType().GetProperty("ID"); 
    var tProp = target.GetType().GetProperty("ID"); 

    var sVal = sProp.GetValue(source); 
    //sProp.SetValue(target, sVal); // will throw Object does not match target type - sProp doesn't belong to target instance 
    tProp.SetValue(target, sVal); 

私はあなたの文

を考えます

変数tPropおよびsPropは、それぞれのオブジェクトのIDプロパティのPropertyInfoオブジェクトです。

本当に真実ではないとtPropsourcesPropの財産であるtargetの性質なので、実行時エラーが発生しました。

関連する問題