編輯:我犯了一個錯誤,前提是錯誤的。 typeof(T).IsClass確實可行 - 正如所指出的那樣,typeof(T)IsInterface也是如此。在C#中,如何判斷泛型類型T是否(不實現!)接口?
說我有這樣的方法:
public T GetService<T>() where T : IService
我想測試通用型,T是否被送入該方法的接口,而不是作爲一個階級。換句話說,我想區分來自MyClass.GetService<IService>()
和MyClass.GetService<ImplementingClass>()
的電話。我怎樣才能做到這一點?
我嘗試使用is object
和is System.Object
,但它不會作出此區別。使用typeof(T).IsClass
和default(T).IsClass
也不起作用,因爲分別返回類型System.Type始終是一個類,並且IsClass不可用於默認的T.
我該怎麼辦?
你試過簡單的轉換,然後檢查是否爲空? http://stackoverflow.com/questions/13405714/is-versus-try-cast-with-null-check –
在你的情況下,如果不引發編譯器異常,對象T總是應該實現IService。所以我不明白你的問題。 – mybirthname
我實際上並不是想知道T是否實現了接口,我想阻止類的用戶使用實現調用此方法 - 它們應該使用接口返回類型。 – Joseph