C#, .NET 3.5Jak znaleźć tylko właściwości, które mają zarówno getter, jak i seter?
Próbuję uzyskać wszystkie właściwości obiektu, które mają ZARÓWNO gettera i setera dla instancji. Kod I myślał powinien pracować jest
PropertyInfo[] infos = source.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.GetProperty);
Jednak wyniki to właściwość, która nie ma setter. Aby dać prosty pomysł mojego struktury dziedziczenia, które mogą mieć wpływ na to (choć nie wiem jak):
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
}
I skończyć z powodu następującego błędu podczas pracy z nazwa:
System.ArgumentException: Property set method not found.
EDYCJA: Chciałbym wiedzieć, dlaczego to działa nie, a także, co powinienem zrobić, aby nie dostać błąd.
Ale dlaczego nie robi BindingFlags.SetProperty już robi, że filtrowanie? Tak właśnie myślałem. – Matt
@Matt: Ponieważ BindingFlags.SetProperty i BindingFlags.SetProperty nie są używane do wyszukiwania, są one używane w innych okolicznościach, metoda Get Properties() ignoruje te flagi. Wypróbuj bez nich, uzyskasz ten sam wynik.Zobacz obsługiwane flagi: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx –