为什么我的测试“propType == typeof(ObservableCollection <string>)”失败了?</string>

时间:2011-12-21 09:27:00

标签: c# generics observablecollection typeof

我有一个FullName为:

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

问题是我想测试我的Type是否是字符串的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 个答案:

答案 0 :(得分:8)

猜测一下,删除多余的.GetType()

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

因为propertyType.GetType()可能是System.Type的衍生物(例如System.RuntimeType)。

答案 1 :(得分:0)

使用:

if (propertyType is ObservableCollection<string>)
{ }