Почему мой тест "propType == typeof (ObservableCollection<string>)" не удался?

Я получил тип, полное имя которого:

"System.Collections.ObjectModel.ObservableCollection`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"

Дело в том, что я хотел бы проверить, является ли мой тип строкой ObservableCollection (в данном случае это так). Итак, вот мой код:

if (propertyType.GetType() == typeof(ObservableCollection<string>))

но, похоже, не получается, и я не понимаю, почему:/

У меня был этот код, который работает:

if (propertyType.Namespace == "System.Collections.ObjectModel" && propertyType.Name == "ObservableCollection`1")
{
    //We are dealing with an ObservableCollection
    var args = propertyType.GetGenericArguments();
    if (args.Count() != 0 && args[0] == typeof(string))
    {
        //MyCode for ObservableCollection<string>
    }
}

но я не чувствую, что это оптимально, и учитывая, что мне придется обрабатывать другие коллекции (IEnumerable, List, etcetc...) других типов (int, bool, etcetc...), это не подходит:(

2 ответа

Решение

Угадай, убери лишний .GetType():

if (propertyType == typeof(ObservableCollection<string>))

поскольку propertyType.GetType() вероятно, некоторая производная System.Type (такие как System.RuntimeType).

Использовать:

if (propertyType is ObservableCollection<string>)
{ }
Другие вопросы по тегам