簡體   English   中英

獲取泛型參數的類型

[英]Get the type of the generic parameter

我有以下課程

public interface InterfaceBase
{
}

public class ImplementA:InterfaceBase
{
}

public class ImplementB:InterfaceBase
{
}

public void TestImplementType<T>(T obj) where T: InterfaceBase
{
}

如何推斷T是ImplementA還是ImplementB? 我試着用

typeof(T) is ImplementA

但是這個表達式總是被評估為假。

編輯:我將如何將 obj 轉換為ImplementA 或ImplementB?

嚴格來說,您應該避免在泛型中進行過多的專業化。 將任何專門的邏輯放在接口上的成員中會更清晰,這樣任何實現都可以以不同的方式執行。 但是,有多種方法:

您可以測試“obj”(假設它是非空的)

    bool testObj = obj is ImplementA;

您可以測試 T 是否為 typeof(ImplementA):

    bool testEq = typeof(T) == typeof(ImplementA);

同樣,您可以測試它是否為ImplementA 或子類:

    bool testAssign = typeof(ImplementA).IsAssignableFrom(typeof(T));

obj is ImplementA

typeof(T)返回TypeT -和System.Type未實現ImplementA 你想要的是:

if (typeof(ImplementA).IsAssignableFrom(typeof(T))
{
}

怎么樣:

 if(obj.GetType().Equals(typeof(ImplementA)))
 {
   // ...
 }

暫無
暫無

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

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