Почему мой тест "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>)
{ }