6

状況: タイプ baseType は実行時にのみ認識されます。objectInstance は baseType 型の子です objectInstance は動的メソッドの呼び出しから取得されました

必須:

Type baseType = ...; // obtained at runtime
var baseDynamicInstance = (basetype) objectInstance; // or reflection cast

ハードコードされている場合は機能します

   var oi = (PartnerBase) objectInstance;   // this works

試した:

public object CastPocoInstance(Type targetType, object objectInstance) {
    MethodInfo castMethod = objectInstance.GetType().GetMethod("Cast").MakeGenericMethod(targetType); // <<< NULL REF here
    object castedObject = castMethod.Invoke(null, new object[] { objectInstance });
    return castedObject;
   }

エラー: null オブジェクト参照エラー。
イミディエイト ウィンドウに objectInstance.GetType().GetMethod("Cast") が null を返す
objectInstance.GetType.GetMethods() // イミディエイト ウィンドウにリストを表示します。// キャスト メソッドは表示されません

Type.GetMethod("Cast") が正しいことを示唆する多くの例を見てきました。しかし、それは機能しません。明らかに、私は何か間違ったことをしています。

任意のヒント

編集:ハードコードされたベースへのダウンキャストなしの呼び出しエラー

[Microsoft.CSharp.RuntimeBinder.RuntimeBinderException] = {"'P42.RepositoryBase.GetEntityState(P42.Core.PartnerBase)' に最も一致するオーバーロードされたメソッドには無効な引数が含まれています"}

EDIT2: 動的メソッド呼び出しから ObjectInstance が取得されます。オブジェクトは、動的メソッドの呼び出しで使用する必要があります。ダウンキャストをハードコーディングすると動作します。var x = (baseobject) ObjInstance そして、x を使用して動的メソッドを呼び出します。できます。

基本型も実行時にのみ認識されます。SpecificObject を BAseObject に動的にキャストする方法はありますか?

4

1 に答える 1