2

クラスをループしようとしていますが、渡された値を取得するのは子クラスです。

これが私のクラスです:

public class MainClass
{
    bool IncludeAdvanced { get; set; }

    public ChildClass1 ChildClass1 { get; set; }
    public ChildClass2 ChildClass2 { get; set; }
}

これまでの私のコードは次のとおりです

GetProperties<MainClass>();

private void GetProperties<T>()
{
    Type classType = typeof(T);
    foreach (PropertyInfo property in classType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
    {
        WriteToLog(property.Name + ": " + property.PropertyType + ": " + property.MemberType);
        GetProperties<property>();
    }
}

2 つの質問:

  1. 子クラスを渡すために、GetProperties に何を渡せばよいでしょうか。それがクラスの場合、そのプロパティをループしますか?
  2. クラスでない場合、プロパティ項目から値を取得するにはどうすればよいですか?

うまくいけば、これはすべて理にかなっています。そうでない場合は、遠慮なくお尋ねください。明確にするよう努めます。

ありがとう

4

4 に答える 4

0
public IEnumerable<PropertyInfo> GetProperties(Type type)
    {
        //Just to avoid the string
        if (type == typeof(String)) return new PropertyInfo[] { };
        var properties = type.GetProperties().ToList();
        foreach (var p in properties.ToList())
        {
            if (p.PropertyType.IsClass)
                properties.AddRange(GetProperties(p.PropertyType));
            else if (p.PropertyType.IsGenericType)
            {
                foreach (var g in p.PropertyType.GetGenericArguments())
                {
                    if (g.IsClass)
                        properties.AddRange(GetProperties(g));
                }
            }
        }
        return properties;

    }

クラスの場合にのみプロパティを反復処理するこれを試してください

于 2013-05-01T13:38:03.600 に答える