Не могу оценить типы IList при зацикливании свойств - PullRequest
1 голос
/ 19 февраля 2011

У меня есть класс со свойствами на нем. Мы назовем этот 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 - это IList, он никогда не оценивается как true. Как мне это исправить?

1 Ответ

5 голосов
/ 19 февраля 2011

Я мог бы использовать:

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

, что охватывает все, что реализует IList.

Причина, по которой prop.PropertyType is IList никогда не оценивает значение true, заключается в том, что он спрашивает "делает ли я Typeобъект реализует IList? ", а не" тип представлен этим Type объектом реализует IList? ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...