在 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
属性.
我正在尝试检查我的对象“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
属性.