如何比较泛型参数类型? [英] How to compare generic parameter types?

查看:177
本文介绍了如何比较泛型参数类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含一个通用型的类:

  MyClass类< T> 
{
}



T类可以是任何类型,包括 MyClass的< AnotherType>
是的,这还挺递归,可以有东西像 MyClass的< MyClass的< MyClass的< T>>>



在某些时候,里面MyClass的,我想知道,如果 T MyClass的< AnyOtherType> 或从 MyClass的的<任何类型; AnyOtherType> 。 (什么并不重要AnyOtherType时,只需要知道如果T是MyClass的)。



所以,我怎么比T形与 MyClass的< ;什么>






我想通了另一件事,以避免与放慢参数的问题,是让 MyClass的< T> 继承 MyClass的(不带参数),使比较容易

  MyClass类< T> :MyClass的



但仍是问题仍然存在:

 如何比较T搭配MyClass的知道,如果它是某种类型的继承MyClass的? 


解决方案

您必须检查与反思 - 递归到账户对于来源于:

 静态布尔IsMyClass(obj对象)
{
返回OBJ ==空值 ?假:IsMyClass(obj.GetType());
}
静态布尔IsMyClass(type类型)
{
,而(A型!= NULL)
{
如果(type.IsGenericType&安培;&安培;
type.GetGenericTypeDefinition()== typeof运算(MyClass的<>))
{
返回真;
}
型= type.BaseType;
}
返回FALSE;
}


I have a class containing a generic Type:

class MyClass<T>
{
}

The T type can be any type, including MyClass<AnotherType>. Yes, that's kinda recursive, can have things like MyClass<MyClass<MyClass<T>>>.

At some point, inside MyClass, I want to know if T is MyClass<AnyOtherType> or any type derived from MyClass<AnyOtherType>. (Doesn't matter what AnyOtherType is, just need to know if T is MyClass).

So, how do I compare T type with MyClass<anything>?


Another thing I figured out, to avoid problems with the paramter, is to make MyClass<T> inherit MyClass (with no parameters), to make the comparison easier.

class MyClass<T> : MyClass

But still the question remains:

How can I compare T with MyClass to know if it's some type that inherits MyClass??

解决方案

You would have to check with reflection - recursively to account for "derived from":

static bool IsMyClass(object obj)
{
    return obj == null ? false : IsMyClass(obj.GetType());
}
static bool IsMyClass(Type type)
{
    while (type != null)
    {
        if (type.IsGenericType &&
            type.GetGenericTypeDefinition() == typeof(MyClass<>))
        {
            return true;
        }
        type = type.BaseType;
    }
    return false;
}

这篇关于如何比较泛型参数类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆