2013-03-15 1 views
4

Мне нужно получить список свойств из MyClass, за исключением «только для чтения», могу ли я получить их?Как получить свойства «ReadOnly» или «WriteOnly» из класса?

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 <>, но как? Я просто использую расширения. Спасибо заранее.

+0

Там в несколько свойств в 'PropertyInfo', которые указывают на чтение/запись –

+0

' myProperties.IsReadOnly' является одним из свойств PropertyInfo [] – MethodMan

ответ

9

Вы не можете использовать 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"); 
} 
+0

Извинения, я забыл запрос сортировки - как вы хотите, чтобы они отсортировались? Чтение \ запись, только для чтения, только для записи или по имени и т. Д.? –

+0

Если вы можете показать примеры всего, что вы говорите, я буду очень благодарен. – Shin

+3

Я получил его сейчас, PropertyInfo [] ... .Where (p => p.CanWrite) .OrderBy (x => x.Name) .ToArray(); – Shin

Смежные вопросы