C #, .NET 3.5
Я пытаюсь получить все свойства объекта, которые имеют ОБА как геттер, так и сеттер для экземпляра. Код, который я думал должен работать, это
PropertyInfo[] infos = source.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.GetProperty);
Однако результаты включают свойство, которое не имеет установщика. Чтобы дать вам простое представление о моей структуре наследования, которая может повлиять на это (хотя я не знаю как):
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
}
Я получаю следующую ошибку при работе с именем:
System.ArgumentException: Property set method not found.
РЕДАКТИРОВАТЬ: Я хотел бы знать, почему это не работает, а также то, что я должен делать, чтобы не получить ошибку.