在 C# 中获取 属性 的属性

Get properties of property in C#

我正在尝试检查我的对象“chartObject”是否具有 属性“图表”,以及 属性“图表”是否具有子 属性“ChartArea” .我知道这两种说法都是正确的。

我有以下代码:

foreach (PropertyDescriptor p1 in TypeDescriptor.GetProperties(chartObject))
{
    if (p1.Name == "Chart")
    {
        currentSheet.Range["D2"].Value = true; //Prints TRUE in cell D2 as expected

        foreach (PropertyDescriptor p2 in TypeDescriptor.GetProperties(p1))
        {
            if ( p2.Name == "ChartArea")
            {
                currentSheet.Range["D3"].Value = true; //Doesn't print anything in D3, why?
            }
        }
    }
}

当我打印 p2.Name 时 returns "DesignTimeOnly",它不是 chartObject.Chart. 的 属性,所以这可能是问题所在。知道我做错了什么吗?随意用我上面尝试过的其他方法解决问题。

问题是,当您在嵌套的 foreach 循环中调用 TypeDescriptor.GetProperties(p1) 时,您将获得对象 p1 的属性,它来自类型 PropertyDescriptor 而不是来自实际的图表 属性 类型和 DesignTimeOnly 恰好是 PropertyDescriptor.

的属性之一

要获得您实际需要的属性,您可以调用 TypeDescriptor.GetProperties() 传递实际 chartObject.Chart 属性.