C#,.NET 3.5
我正在尝试获取一个实例中具有getter和setter的所有属性。 我认为应该起作用的代码是
PropertyInfo[] infos = source.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.GetProperty);
然而,这些结果包含一个没有setter的属性。为了让您对我的继承结构有一个简单的想法可能会影响这个问题(虽然我不知道如何解决):
public interface IModel
{
string Name { get; }
}
public class BaseModel<TType> : IModel
{
public virtual string Name { get { return "Foo"; } }
public void ReflectionCopyTo(TType target)
{
PropertyInfo[] infos = this.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.GetProperty);
foreach (PropertyInfo info in infos)
info.SetValue(target, info.GetValue(this, null), null);
}
}
public class Child : BaseModel<Child>
{
// I do nothing to override the Name property here
}
在使用 Name 时,我遇到了以下错误:
System.ArgumentException: Property set method not found.
编辑:我想知道为什么这个不起作用,以及我应该做什么才能避免出错。