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