プロパティの型が列挙型であるかどうかを検出する一般的な方法はありますか? 質問する

プロパティの型が列挙型であるかどうかを検出する一般的な方法はありますか? 質問する

これを考慮すると:

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);
}

おすすめ記事