簡體   English   中英

在C#中,如何查找對象是否屬於通用基本類型

[英]In C#, How do you find out whether an Object is of a Generic Base Type

在編寫代碼生成工具(類的客戶端庫)的過程中,我發現了一個有趣的問題。

我有一組類: SomeClass : MyBaseClass<SomeClass> SomeOtherClass : SomeOtherBaseClass ClassC : SomeCompletelyOtherBaseClass<SomeClass>

所有MyBaseClass<T>SomeOtherBaseClassSomeCompletelyOtherBaseClass<T>都繼承自相同的基類,但是我對此不感興趣。

同樣作為代碼輸入,我有一個Reflected Type(反射類型( System.Type ))。

我想找到的是我的Reflected Type-它繼承了這些通用基類之一。

我知道可以使用IS運算符或IsAssignableFrom ,但是在這種情況下,我不知道泛型是什么。

所以我不能只說myType.IsAssignableFrom(MyBaseClass<T>) ,因為我不知道T ,所以我只有MyBaseClass名稱。

我要擺脫的是-能夠在switch / case語句中使用它,即對於從MyBaseClass繼承的所有類都這樣做,對於從SomeCompletelyOtherBaseClass繼承的所有類都這樣做。

有任何想法嗎?

但是,我將需要確定T在后面,因此歡迎任何其他輸入。

簡單的樣機:

namespace Program {

  class MyGeneric<T> { }

  class MyDerived : MyGeneric<String> { }

  class Program {
    public static void Main() {
      MyDerived item = new MyDerived ();
      Boolean isIt = typeof(MyGeneric<>).BaseType.IsAssignableFrom (item.GetType());
      Console.WriteLine (isIt); // Output: "True"

      foreach (Type type in item.GetType().BaseType.GetGenericArguments())
        Console.WriteLine(type.Name);
    }
  }
}

暫無
暫無

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

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