有没有办法通过反射设置C#readonly自动实现的属性?

时间:2010-12-01 18:30:28

标签: c# reflection properties field readonly

标题全部说明: 有没有办法通过反射设置C#readonly自动实现的Propeties?

typeof(Change)
    .GetProperty("ChangeType", BindingFlags.Instance | BindingFlags.Public)
    .SetValue(myChange, change.ChangeType.Transform(),null);

这一行给出了一个错误: System.ArgumentException - {“找不到属性集方法。”} 。问题是我无法使用 GetField ,因为没有字段。

在你问之前,我这样做是因为我需要“补充”已经完成的库,而我无法访问它的代码。

2 个答案:

答案 0 :(得分:4)

这应该有用,所以有些东西你没有告诉我们。你确定它是一个自动实现的属性吗?与您所看到的一致的解释是该属性不是自动实现的,也没有设置器。

即,

public class Foo { public int Bar { get; set; } }

typeof(Foo).GetProperty("Bar").SetValue(foo, 42);

会成功,但

public class Foo { public int Bar { get { return 42; } } }

typeof(Foo).GetProperty("Bar").SetValue(foo, 42);

不会,它会产生你看到的消息的异常。

答案 1 :(得分:1)

显而易见的结论是Change.ChangeType没有公共实例设置器。