[英]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)
返回Type
的T
-和System.Type
未實現ImplementA
。 你想要的是:
if (typeof(ImplementA).IsAssignableFrom(typeof(T))
{
}
怎么樣:
if(obj.GetType().Equals(typeof(ImplementA)))
{
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.