[英]How to access string properties of an object C#
我想訪問 object 的所有字符串屬性,它定義了類,這些類也具有字符串類型的屬性以應用某種處理。 例如:
public class Class1
{
public string String1 {get; set;}
public Class2 class2 {get; set;}
}
public class Class2
{
public string String2 {get; set;}
}
在這里,我想要一個包含 String1 和 String2 的屬性列表
目前我知道如何訪問 String1:
var instanceOfClass1 = new Class1();
var stringsList = instanceOfClass1.GetType().GetProperties().Where(prop => prop.PropertyType == typeof(string));
但這不會訪問 String2。
如果您有任何想法,請提前致謝。
您可以使用遞歸方法來生成所需類型的每個屬性
public static IEnumerable<PropertyInfo> GetProp<T>(object Obj)
{
if (Obj is object)
{
foreach (var prop in Obj.GetType().GetProperties())
{
if (prop.PropertyType == typeof(T))
{
yield return prop;
}
else
{
foreach (var t in GetProp<T>(prop.GetValue(Obj)))
yield return t;
}
}
}
}
public class Class1
{
public string String1 {get; set;}
public Class2 class2 {get; set;}
}
public class Class2
{
public string String2 {get; set;}
public Class3 class3 {get; set;}
}
public class Class3
{
public string String3 {get; set;}
public int int3 {get; set;}
}
var instanceOfClass1 = new Class1
{
class2 = new Class2
{
class3 = new Class3()
}
};
foreach (var prop in GetProp<string>(instanceOfClass1))
{
Console.WriteLine(prop);
}
這輸出:
System.String String1
System.String String2
System.String String3
請注意,循環引用將以無限循環/堆棧溢出結束:
public class Class1
{
public string String1 {get; set;}
public Class2 class2 {get; set;}
public Class1()
{
class2 = new Class2(this);
}
}
public class Class2
{
public string String2 {get; set;}
public Class1 class1 {get; set;}
public Class2(Class1 class1)
{
this.class1 = class1;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.