循环属性时无法评估 IList 的类型

发布于 2024-10-18 06:33:45 字数 949 浏览 2 评论 0原文

我有一个带有属性的类。我们将此称为 TestMeCommand(见下文)。这个类有一个列表。我需要做的是循环类的属性,并识别列表。现在必须通用地构建它,因为它的代码用于验证,因此相同的代码可能需要标识 ListList 或其他内容。

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 这样的操作,它永远不会计算为 true。我该如何修复它?

I have a class with properties on it. We will call this TestMeCommand (see below). This class has a list on it. What I need to do is loop over the properties of the class, and identify the List. Now this has to be built generically because its code for validation, so this same code might need to identify a List<int> or a List<string>, or something else.

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

Now the problem is that I have code that looks like this:

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

I dont want to put that string in there, but if I do something like prop.PropertyType is IList it never evaluates true. How do I fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

指尖微凉心微凉 2024-10-25 06:33:45

我可能会使用:

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

它涵盖了实现 IList 的任何内容。

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

I might use:

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

which covers anything implementing IList.

The reason that prop.PropertyType is IList never evaluates true is that this is asking "does my Type object implement IList?", rather than "does the type represented by this Type object implement IList?".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文