c# - 有没有一种通用的方法来检测属性的类型是否为可枚举类型?

标签 c#

鉴于此:

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 是否为可枚举类型?有些会使用其他可枚举类型(例如 ICollection),而不是 IList。

最佳答案

您的代码实际上并不检查属性是否为 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);
}

关于c# - 有没有一种通用的方法来检测属性的类型是否为可枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6483096/

相关文章:

c# - 从独立存储中的图像设置辅助平铺背景图像

c#:如何处理来自第 3 方库的终结器异常?

c# - 无法正确实现WPF MVVM

c# - 在应用程序关闭时关闭另一个进程

c# - 两个类,相同的方法,一个对象?

c# - 使用 .NET 4.5 async,await 将 Azure blob 异步流式传输到客户端

c# - Azure 服务总线广播到所有辅助角色实例

c# - 如何在不使用 .net 中的属性的情况下在 dynamodb 中映射类属性

c# - .Net Core 枚举值在获取响应后未序列化

C# MVC 动态创建 View 模型