2010-11-11 58 views
3

有沒有解決此問題的方法?使用反射的模糊例外

看看下面的代碼...

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( 「姓名」)' 拋出B/C的名字是父母與子女之間的曖昧。我想要Child的「Name」。有沒有辦法做到這一點?

我試過各種綁定標誌,沒有運氣。

回答

5

添加一些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));