我如何获得属性(property)?当前Ambiguous match found发生错误,请参见代码中的注释行。

public class MyBaseEntity
{
    public MyBaseEntity MyEntity { get; set; }
}

public class MyDerivedEntity : MyBaseEntity
{
    public new MyDerivedEntity MyEntity { get; set; }
}

private static void Main(string[] args)
{
    MyDerivedEntity myDE = new MyDerivedEntity();

    PropertyInfo propInfoSrcObj = myDE.GetType().GetProperty("MyEntity");
    //-- ERROR: Ambiguous match found
}

最佳答案

Type.GetProperty

如果运行以下命令

var properties = myDE.GetType().GetProperties().Where(p => p.Name == "MyEntity");
您将看到返回了两个PropertyInfo对象。一种用于MyBaseEntity,另一种用于MyDerivedEntity。这就是为什么您收到“模糊匹配找到”错误的原因。
您可以像这样获得PropertyInfoMyDerivedEntity:
PropertyInfo propInfoSrcObj = myDE.GetType().GetProperties().Single(p =>
    p.Name == "MyEntity" && p.PropertyType == typeof(MyDerivedEntity));

关于c# - GetProperty反射在新属性上导致 “Ambiguous match found”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11443707/

10-11 10:25