簡體   English   中英

如何比較通用參數類型?

[英]How to compare generic parameter types?

我有一個包含通用類型的類:

class MyClass<T>
{
}

T類型可以是任何類型,包括MyClass<AnotherType> 是的,這有點遞歸,可以包含MyClass<MyClass<MyClass<T>>>

在MyClass內部的某個點上,我想知道TMyClass<AnyOtherType>還是從MyClass<AnyOtherType>派生的任何類型。 (不管AnyOtherType是什么,只需要知道T是否為MyClass)。

那么,如何將T類型與MyClass<anything>進行比較?


為了避免參數出現問題,我想出的另一件事是使MyClass<T>繼承MyClass (不帶參數),從而使比較更加容易。

class MyClass<T> : MyClass

但是問題仍然存在:

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

您將不得不進行反思檢查-遞歸地說明“源自”:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM