Неоднозначное исключение с использованием отражения - PullRequest
3 голосов
/ 11 ноября 2010

Есть ли способ обойти эту проблему?

Возьмите следующий код ...

namespace ReflectionResearch
{
 class Program
 {
  static void Main(string[] args)
  {
   Child child = new Child();

   child.GetType().GetProperty("Name");
  }
 }

 public class Parent
 {
  public string Name
  {
   get;
   set;
  }
 }

 public class Child : Parent
 {
  public new int Name
  {
   get;
   set;
  }
 }
}

Строка 'child.GetType (). GetProperty ("Name") "выбрасывает b / c. Имя является неоднозначным между Parent и Child. Я хочу "Имя" от ребенка. Есть ли способ сделать это?

Я попробовал различные флаги привязки без удачи.

1 Ответ

5 голосов
/ 11 ноября 2010

Добавить некоторые BindingFlags:

child.GetType().GetProperty("Name",
     BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);

DeclaredOnly означает:

Указывает, что должны рассматриваться только члены, объявленные на уровне иерархии предоставленного типа.Унаследованные члены не рассматриваются.

Или альтернатива, использующая LINQ (которая позволяет легко добавлять любые необычные проверки, например, проверку Attribute.IsDefined):

child.GetType().GetProperties().Single(
    prop => prop.Name == "Name" && prop.DeclaringType == typeof(Child));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...