30

を含む可能性のあるオブジェクトがある場合IEnumerable<T>、プロパティが存在することをどのように確認し、存在する場合は、リフレクションを使用しIEnumerable<T>てその中のすべての値をループしますか?IEnumerable<T>T

4

2 に答える 2

31
foreach (var property in yourObject.GetType().GetProperties())
{
    if (property.PropertyType.GetInterfaces().Contains(typeof(IEnumerable)))
    {
        foreach (var item in (IEnumerable)property.GetValue(yourObject, null))
        {
             //do stuff
        }
    }
}
于 2012-09-26T19:04:28.397 に答える
7

さて、Aghilasが言ったようにそれをテストすることができ、IEnumerableとしてテストおよび確認されると、次のようなことができます。

public static bool IsEnumerable( object myProperty )
{
    if( typeof(IEnumerable).IsAssignableFrom(myProperty .GetType())
        || typeof(IEnumerable<>).IsAssignableFrom(myProperty .GetType()))
        return true;

    return false;
}

public static string Iterate( object myProperty )
{
    var ie = myProperty as IEnumerable;
    string s = string.Empty;
    if (ie != null)
    {
        bool first = true;
        foreach( var p in ie )
        {
            if( !first )
                s += ", ";
            s += p.ToString();
            first = false;
        }
    }
    return s;
}

foreach( var p in myObject.GetType().GetProperties() )
{
    var myProperty = p.GetValue( myObject );
    if( IsEnumerable( myProperty ) )
    {
        Iterate( myProperty );
    }
}
于 2012-09-26T19:11:43.993 に答える