如何从类中获取“ReadOnly”或“WriteOnly”属性?

时间:2013-03-15 18:10:59

标签: c# reflection properties readonly writeonly

我需要从MyClass获取一个属性列表,不包括'readonly'属性,我可以得到它们吗?

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 个答案:

答案 0 :(得分:11)

您不能使用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");
}