2017-02-08 14 views
0

私のC#アプリケーションでは、public virtual void ValidateModel()というメソッドを持つクラスBaseDomainModelから継承したオブジェクトを時々処理します。私の例では、少なくともから継承する型の1つのプロパティを持つCompanyUserオブジェクトのインスタンスを取得しています。子プロパティのメソッドを呼び出そうとしています

私はこれらのプロパティを調べて、それらのプロパティに対してValidateModel()メソッドを呼び出したいと思います。私は現在、このメッセージが出てい

var validatableProperties = testCompanyUser.GetType().GetProperties().Where(p => p.PropertyType.BaseType == typeof(BaseDomainModel)); 
foreach (var thisProperty in validatableProperties) 
{ 
    var m = thisProperty.PropertyType.GetMethod("ValidateModel", Type.EmptyTypes); 
    m.Invoke(thisProperty.GetValue(testCompanyUser), null); 
} 

非静的メソッドは、ターゲットが必要です。ここ

は、私がこれまで持っているものです。

私は何かが簡単ではないと確信しています。私は何を間違えたのですか?

答えて

2

thisProperty.GetValue(testCompanyUser)null(参照型が保持されているため)を返すことができますが、チェックしていないという問題があります。

もう1つは、プロパティとメソッドのリクエストにBindingFlagsを設定していないことです。言及@Phil Cooperとして

foreach(var property in testCompanyUser.GetType().GetProperties(BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public).Where(p => p.PropertyType.BaseType == typeof(BaseDomainModel))) 
{ 
    var method = property.PropertyType.GetMethod("ValidateModel", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 
    object propValue = property.GetValue(testCompanyUser); 
    if(method != null && propValue != null) 
    { 
     m.Invoke(propValue, null); 
    } 

はこのような何かを試してみてください。 this MSDNページを参照して、Exceptionがスローされたときの詳細を確認できます。

+1

[msdn](https://msdn.microsoft.com/en-us/library/a89hcwhh(v = vs.110) .aspx)は、Invokeの使用法、特に 'TargetException'がスローされる条件について詳しく説明します。 –

関連する問題