簡體   English   中英

如何訪問 object C# 的字符串屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM