![](/img/trans.png)
[英]c# .NET 6.0 Determine the generic type used for a Func<T> when all you have is the base object
[英]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>
, SomeOtherBaseClass
和SomeCompletelyOtherBaseClass<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.