c# - 循环属性时无法评估 List 的类型

标签 c# reflection properties

我有一个带有属性的类。我们将调用此 TestMeCommand(见下文)。这个类有一个列表。我需要做的是遍历类的属性,并识别列表。现在必须一般地构建它,因为它的代码用于验证,所以同样的代码可能需要识别 List<int>List<string> ,或其他东西。

public class TestMeCommand
{
    [Range(1, Int32.MaxValue)]
    public int TheInt { get; set; }

    [Required]
    [StringLength(50)]
    public string TheString { get; set; }

    [ListNotEmptyValidator]
    public List<TestListItem> MyList { get; set; }

    public class TestListItem
    {
        [Range(1, Int32.MaxValue)]
        public int ListInt { get; set; }
    }
}

现在的问题是我的代码看起来像这样:

foreach (var prop in this.GetType().GetProperties())
{
    if (prop.PropertyType.FullName.StartsWith("System.Collections.Generic.List"))
    {
        IList list = prop.GetGetMethod().Invoke(this, null) as IList;
    }
}

我不想把那个字符串放在那里,但如果我做类似 prop.PropertyType is IList 的事情,它永远不会评估为真。我该如何解决?

最佳答案

我可能会使用:

if(typeof(IList).IsAssignableFrom(prop.PropertyType)) {...}

其中涵盖了所有实现 IList 的内容。

prop.PropertyType is IList 从未评估为真的原因是这是在问“我的 Type 对象是否实现了 IList?”,而不是“此 Type 对象表示的类型是否实现了 IList?”。

关于c# - 循环属性时无法评估 List 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047380/

相关文章:

class - 获取由 JRuby 中的字符串表示的 Java 类? (没有评估)

c# - 用派生类覆盖基类的属性

c# - 在 C# 中使用典型的 get set 属性...带参数

c# - 单线程单元与多线程单元

c# - 是否可以在程序的 GUI 中显示 Serilog 日志?

c# - 将类方法转换为IL并在运行时执行

c# - 通过反射或类似方式动态生成属性 getter/setter

visual-studio - 如何使用 msbuild 获取项目文件的属性值

c# - 机器人框架 .Net 中的本地化

C# ColorTranslator.FromHtml() 抛出 "Grey"的异常(不是 int32 的有效值)