これを考慮すると:
class InvoiceHeader {
public int InvoiceHeaderId { get; set; }
IList<InvoiceDetail> LineItems { get; set; }
}
現在、クラスにコレクション プロパティがあるかどうかを検出するために次のコードを使用しています。
void DetectCollection(object modelSource)
{
Type modelSourceType = modelSource.GetType();
foreach (PropertyInfo p in modelSourceType.GetProperties())
{
if (p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition() == typeof(IList<>))
{
System.Windows.Forms.MessageBox.Show(p.Name);
}
}
}
LineItems が列挙型であるかどうかを検出する一般的な方法はありますか? IList ではなく、他の列挙型 (ICollection など) を使用するものもあります。
ベストアンサー1
コードでは、プロパティがEnumerable
型であるかどうかは実際にはチェックされませんが、汎用 IList であるかどうかはチェックされます。次を試してください。
if(typeof(IEnumerable).IsAssignableFrom(p.PropertyType))
{
System.Windows.Forms.MessageBox.Show(p.Name);
}
あるいはこれ
if (p.PropertyType.GetInterfaces().Contains(typeof(IEnumerable)))
{
System.Windows.Forms.MessageBox.Show(p.Name);
}