为什么我的测试“propType == typeof(ObservableCollection)”失败?

发布于 2024-12-22 04:19:19 字数 876 浏览 1 评论 0原文

我得到一个类型,其全名是:

"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,其他类型(int、bool、等等...)的列表等...)这不太适合:(

I got a Type whose FullName is :

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

The thing is that I'd like to test if my Type is an ObservableCollection of string (in the current case, it is). So here is my code :

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

but it seems to fail and I don't understand why :/

I had this code thats works :

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

but I don't feel like it's optimal and considering that I'll have to handle other collections (IEnumerable, List, etcetc...) of other Types (int, bool, etcetc...) this doesnt fit well :(

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

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

发布评论

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

评论(2

橘亓 2024-12-29 04:19:19

据猜测,删除额外的 .GetType()

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

因为 propertyType.GetType() 可能是 System.Type 的某种派生(例如System.RuntimeType)。

At a guess, remove the extra .GetType():

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

since propertyType.GetType() is probably some derivative of System.Type (such as System.RuntimeType).

晨与橙与城 2024-12-29 04:19:19

使用:

if (propertyType is ObservableCollection<string>)
{ }

use:

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