2017-01-22 4 views
1

私の最初のプロジェクトのビジネスモデルに取り組んでいます(私のコードの品質が不十分であると感じたら、私は進歩しています)。私はバグの理由を見つけようとしている。私はプロパティとカスタム属性の反映に依存するビューを作成しています。私は、PropertyInfo.GetCustomAttributeを「プロパティのプロパティ」で2回目に使用すると、null参照例外が発生します。なぜ2番目の呼び出しがnullを返すのですか?ご覧のとおり、メソッドを呼び出すプロパティ(_TopSchools)に属性を適用しました。PropertyInfo.GetCustomAttributeの例外を取得します<T>

public class EducationFilter : Filter 
{ 
    [FilterAttribute(FilterType.Child, "Topschools")]//I cant get this attr! 
    public TopSchoolFilter _TopSchool { get; set; } 
} 

public class TopSchoolFilter :BooleanFilter 
{ 

} 

public class Filters 
{ 
    [FilterAttribute(FilterType.Parent, "Education")] //This i can... 
    public EducationFilter _EducationFilter { get; set; } 

    public Filters(EducationFilter educationFilter) 
    { 
     this._EducationFilter = educationFilter; 
    } 
} 

public StackLayout GenerateFilterView(PropertyInfo p,TestModel vm) 
     { 
      StackLayout tempStack = new StackLayout(); 
      **FilterAttribute filterAttr = p.GetCustomAttribute<FilterAttribute>();**//This returns the attr instance 
      IEnumerable<PropertyInfo> filterProperties = p.PropertyType.GetRuntimeProperties(); 

      foreach (PropertyInfo p1 in filterProperties) 
      { 
       **FilterAttribute filterAttr1 = p1.GetCustomAttribute<FilterAttribute>();**//But not this one, i get null 
+0

nullを取得した場合、それは、問題のプロパティに、要求している属性がないことを意味します。 'p1.Name'をチェックして、それがあなたが期待していたプロパティであることを確認してください。そうでなければ、属性なしでプロパティをスキップするだけですか? – cdhowie

+1

cdhowie、それは私が問題を追跡するのを助けました。私はいくつかのプロパティを持っていますが、その属性を持っているのがベースクラスから継承されていました。ありがとう! – arif

+0

"p"に何を渡していますか?(PropertyInfo p、TestModel vm) –

答えて

0

GetCustomAttribute<T>()もし戻っnullそのカスタム属性プロバイダ(この場合はプロパティ)はその型の属性を持っていないことを意味します。この属性を持つプロパティのみに興味がある場合は、その属性を使わずにプロパティをスキップすることができます。

if (filterAttr1 == null) { 
    continue; 
} 
関連する問題