2010-11-11 8 views
3

Y a-t-il un moyen de contourner ce problème?Exception ambiguë utilisant la réflexion

Prenez le code suivant ...

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; 
    } 
} 
} 

La ligne 'child.GetType(). GetProperty ("Name")' lancers francs Nom b/c est ambigu entre parent et enfant. Je veux "Nom" de l'enfant. Y a-t-il un moyen de faire cela?

J'ai essayé divers drapeaux de liaison sans succès.

Répondre

5

Ajouter une BindingFlags:

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

DeclaredOnly signifie:

Indique que seuls les membres déclarés au niveau de la hiérarchie du type fourni doit être pris en considération. Les membres hérités ne sont pas pris en compte.

Ou une alternative en utilisant LINQ (ce qui le rend facile d'ajouter des contrôles inhabituels, par exemple la vérification Attribute.IsDefined):

child.GetType().GetProperties().Single(
    prop => prop.Name == "Name" && prop.DeclaringType == typeof(Child)); 
Questions connexes