我有一個IRoot的層次結構接口,其中H是層次結構類型,N是節點類型。我想工作的對象是否是類型IRoot的,我會怎麼做這個...是泛型類型
我看過的匹配類型反射接口和isassignedfrom,所有不工作
我有一個IRoot的層次結構接口,其中H是層次結構類型,N是節點類型。我想工作的對象是否是類型IRoot的,我會怎麼做這個...是泛型類型
我看過的匹配類型反射接口和isassignedfrom,所有不工作
方式一:
var ifc = obj.GetType().GetInterface(typeof(IRoot<,>).Name);
if(ifc != null) {
// operate assuming type is IRoot<,>
}
請務必閱讀關於GetInterface()
的文檔並打開泛型類型。這很奇怪,所以瞭解這裏發生的事情很重要。
編輯:您也可以使用typeof(IRoot<,>).Name
代替"IRoot`2"
以避免使用硬編碼的字符串。我更新了上面的代碼來做到這一點。
除了siride的回答是:
如果你可以改變的IRoot<H, N>
定義,使其IRoot<H,N> : IRoot
,那麼下面也將工作:
object someInstance = new SomeDerivedClass<TFoo, TBar>();
bool isOfRoot = typeof (IRoot).IsInstanceOfType(someInstance);
甚至
bool isOfRoot = someInstance is IRoot;
這使得它更安全一些,因爲不涉及任何字符串。
你能告訴我們一些代碼嗎? – 2012-03-17 16:00:43
你可以發佈你到目前爲止的代碼嗎?這並不完全清楚你想要做什麼。 – 2012-03-17 16:00:48
有一個'IRoot',你想看看一個對象是否實現了這個,而不管'H'和'N'的選擇是什麼? –
Jon
2012-03-17 16:03:35