8

「読み取り専用」のものを除いて、MyClassからプロパティのリストを取得する必要がありますが、「それらを取得できますか?」

public class MyClass
{
   public string Name { get; set; }
   public int Tracks { get; set; }
   public int Count { get; }
   public DateTime SomeDate { set; }
}

public class AnotherClass
{
    public void Some()
    {
        MyClass c = new MyClass();

        PropertyInfo[] myProperties = c.GetType().
                                      GetProperties(BindingFlags.Public |
                                                    BindingFlags.SetProperty |
                                                    BindingFlags.Instance);
        // what combination of flags should I use to get 'readonly' (or 'writeonly')
        // properties?
    }
}

そして最後に、私はそれらをソートしますか?、OrderBy <>を追加することを知っていますが、どのように?私は拡張機能を使用しています。前もって感謝します。

4

1 に答える 1

12

BindingFlagsを使用して読み取り専用または書き込み専用のプロパティを指定することはできませんが、返されたプロパティを列挙してから、PropertyInfoのCanReadプロパティとCanWriteプロパティを次のようにテストできます。

PropertyInfo[] myProperties = c.GetType().GetProperties(BindingFlags.Public |
                                                    BindingFlags.SetProperty |
                                                    BindingFlags.Instance);

foreach (PropertyInfo item in myProperties)
{
    if (item.CanRead)
        Console.Write("Can read");

    if (item.CanWrite)
        Console.Write("Can write");
}
于 2013-03-15T18:20:03.117 に答える