2016-08-01 12 views
1

System.Reflectionに問題があります。添付コードを参照してください:System.reflectionの問題GetFieldsがすべてを返さない

class Program 
{ 
    public static FieldInfo[] ReflectionMethod(object obj) 
    { 
     var flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly; 
     return obj.GetType().GetFields(flags); 
    } 
     static void Main() 
    { 
     var test = new Test() { Id = 0, Age = 12, Height = 24, IsSomething = true, Name = "Greg", Weight = 100 }; 
     var res = ReflectionMethod(test); 
    } 
} 

    public class Test 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public bool IsSomething { get; set; } 
    public int Weight { get; set; } 
    public int Height { get; set; } 
    public int CalculationResult => Weight * Height; 

    public Test() 
    { 

    } 
} 

getfieldsメソッドは計算されたプロパティCalculationResultを取得していないようです。私は使用する必要がある別のフラグがあると仮定していますが、どれがどれであるかわかりません。

ありがとうございました。私は必要に応じて、より多くの情報を提供しています。

答えて

4

これはプロパティでありフィールドではないためです。

=>は、プロパティであるゲッターの構文糖です。ですから、このコード行を解析し、.GetProperties(flags)

+0

ああ、それは意味があり、それも動作します、多くのありがとう! – ASMoncrieff

+0

と私に「構文的砂糖」というフレーズを紹介してくれてありがとう、私は会話でそれをもっと使うつもりです – ASMoncrieff

2

まあを使用する必要が

public int CalculationResult 
{ 
    get 
    { 
     return Weight * Height; 
    } 
} 

:だから、にequivelantある

もC#6.0のシンタックスシュガーなし(のように簡略化することができ
public int CalculationResult => Weight * Height; 

):

public int CalculationResult {get { return Weight*Height; } } 

自動ではないため、バッキングフィールドは作成されませんそれはリフレクションコールでクラスから取り出されたフィールドの中にはないからです。

public int CalculationResult { get; }に変更すると、フィールドが作成され、リストに表示されます。

関連する問題