1

これらの2つのクラスがあるとします

public class Container
{
    public string name { get; set; }
    public Inner Inner { get; set; }
}

public class Inner
{
    public string text { get; set; }
    public Inner2 Innert2 { get; set; }
}

public class Inner2 {}

Containerクラスのインスタンスがネストされたすべてのクラスインスタンスを見つけるとしたら、どうすればよいでしょうか。文字列などではなく、クラスについてのみ本当に心配しています。

Inner にクラスがある場合でも機能するように、ジェネリックである必要があります。また、クラスのList<>またはIEnumerableがある場合は、それらも見つける必要があります。

乾杯。

4

3 に答える 3

2

リフレクションを使用する方法です。クラスのプロパティを取得し、プロパティが値型でない場合は、それ自体を再帰的に呼び出すコードの簡単なスニペットを次に示します。Enums または IEnumerable メンバーで特定の動作が必要な場合は、明らかにそれを追加する必要があります。

public void FindClasses(object o)
{
    if (o != null)
    {
        Type t = o.GetType();
        foreach(PropertyInfo pi in t.GetProperties())
        {
            if(!pi.PropertyType.IsValueType)
            {
                // property is of a type that is not a value type (like int, double, etc).
                FindClasses(pi.GetValue(o, null));
            }
        }
    }
}
于 2009-05-01T12:06:23.533 に答える
2

あなたの例のコードがそのようなものであれば、あなたの質問はうまくいくでしょう:

public class Container
{
    public string name { get; set; }
    public Inner Inner { get; set; }
}

public class Inner
{
    public string text { get; set; }
    public List<Inner> MoreInners { get; set; }
}

この場合、外部反復子クラスを使用して作業を行うか、再帰を Container クラスに直接組み込むことができます。私は後者を行います:

public class Container
{
    public string name { get; set; }
    public Inner Inner { get; set; }

    public List<Inner> SelectAllInner()
    {
        List<Inner> list = new List<Inner>();
        SelectAllInner(Inner, list);
        return list;
    }

    private void SelectAllInner(Inner inner, List<Inner> list)
    {
        list.Add(inner);
        foreach(Inner inner in MoreInners)
            SelectAllInner(inner, list);
    }
}

public class Inner
{
    public string text { get; set; }
    public List<Inner> MoreInners { get; set; }
}
于 2009-05-01T12:15:35.990 に答える
-1

リフレクションでオブジェクトグラフを再帰的にループしたい

http://msdn.microsoft.com/en-us/library/ms173183(VS.80).aspx

于 2009-05-01T12:03:15.723 に答える