标题全部说明: 有没有办法通过反射设置C#readonly自动实现的Propeties?
typeof(Change)
.GetProperty("ChangeType", BindingFlags.Instance | BindingFlags.Public)
.SetValue(myChange, change.ChangeType.Transform(),null);
这一行给出了一个错误: System.ArgumentException - {“找不到属性集方法。”} 。问题是我无法使用 GetField ,因为没有字段。
在你问之前,我这样做是因为我需要“补充”已经完成的库,而我无法访问它的代码。
答案 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
没有公共实例设置器。