Как получить свойства "ReadOnly" или "WriteOnly" из класса?

Мне нужно получить список свойств из 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?
    }
}

И, наконец, coluld, я их сортирую? Я знаю добавление OrderBy<>, но как? Я просто использую расширения. Заранее спасибо.

1 ответ

Решение

Вы не можете использовать BindingFlags для указания свойств только для чтения или только для записи, но вы можете перечислить возвращенные свойства и затем протестировать свойства CanRead и CanWrite в PropertyInfo следующим образом:

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");
}
Другие вопросы по тегам