状況: タイプ 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 に動的にキャストする方法はありますか?