获取匿名类型的读/写属性

Sha*_*bie 12 c# reflection anonymous-types

我需要获取可以写入的匿名类型的所有属性.

例如:

 var person = new {Name = "Person's Name", Age = 25};
 Type anonymousType = person.GetType();
 var properties = anonymousType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
Run Code Online (Sandbox Code Playgroud)

问题是所有属性都有其CanWrite属性false.对于非匿名类型,返回true.
我也尝试过调用PropertyInfo.GetSetMethod()哪个返回null.
如何检查属性是否可以写入?

编辑: 也许知道一个类型是否是匿名的就足够了.如何使用反射查明某个类型是匿名的?

Jon*_*eet 18

从C#生成的匿名类型总是不可变的,因此可写属性集是空的.在VB中它是可选的:每个属性默认为可变,但如果你在Key它前面加上它是不可变的; 只有使用Keycount 声明相等和哈希码生成的属性.我个人更喜欢C#的方法.

CanWrite对于非匿名类型的属性,并不总是返回true - 仅用于可写的属性.属性可以是只读,只写或读写.例如:

public class Test
{
    // CanWrite will return false. CanRead will return true.
    public int ReadOnly { get { return 10; } }

    // CanWrite will return true. CanRead will return false.
    public int WriteOnly { set {} }

    // CanWrite will return true. CanRead will return true.
    public int ReadWrite { get { return 10; } set {} }
}
Run Code Online (Sandbox Code Playgroud)