gpt4 book ai didi

c# - 如何在C#.Net中使用反射(指定多少层次结构)来获取类的属性?

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:57 25 4
gpt4 key购买 nike

因此,例如:

class GrandParent {
public int GrandProperty1 { get; set; }
public int GrandProperty2 { get; set; }
}

class Parent : GrandParent {
public int ParentProperty1 { get; set; }
public int ParentProperty2 { get; set; }
protected int ParentPropertyProtected1 { get; set; }
}

class Child : Parent {
public int ChildProperty1 { get; set; }
public int ChildProperty2 { get; set; }
protected int ChildPropertyProtected1 { get; set; }
}


但是当我这样做时:

public String GetProperties() {
String result = "";
Child child = new Child();
Type type = child.GetType();
PropertyInfo[] pi = type.GetProperties();
foreach (PropertyInfo prop in pi) {
result += prop.Name + "\n";
}
return result;
}


函数返回

ChildProperty1
ChildProperty2
ParentProperty1
ParentProperty2
GrandProperty1
GrandProperty2

但我只需要直到Parent类的属性

ChildProperty1
ChildProperty2
ParentProperty1
ParentProperty2

是否有任何可能的方法可以指定可以使用多少个层次结构,以便返回的结果将是所需的?提前致谢。

最佳答案

可以将BindingFlags.DeclaredOnlyType.GetProperties一起使用,以仅搜索在Type上声明的属性,并排除继承的属性。然后,您可以编写一个方法,该方法获取类型的属性并针对指定的递归深度递归获取其父类型。

string GetProperties(Type type, int depth)
{
if (type != null && depth > 0)
{
string result = string.Empty;
PropertyInfo[] pi = type.GetProperties(BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in pi)
{
result += prop.Name + "\n";
}
result += GetProperties(type.BaseType, depth - 1) + "\n";
return result;
}

return null;
}


例:

Console.WriteLine(GetProperties(typeof(Child), 2));


输出:

子属性1
ChildProperty2
ParentProperty1
ParentProperty2

关于c# - 如何在C#.Net中使用反射(指定多少层次结构)来获取类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1774446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com