我想檢查一個開放泛型類型定義是否實現了一些開放泛型接口。請看下面的例子:如何檢查泛型類型定義是否繼承另一個泛型類型定義
public interface IService<T> { }
public class ServiceImpl<T> : IService<T> { }
private static bool OpenGenericTypeImplementsOpenGenericInterface(
Type derivedType, Type interfaceType)
{
return derivedType.GetInterfaces().Contains(interfaceType);
}
[TestMethod]
public void Verify()
{
Type openGenericImplementation = typeof(ServiceImpl<>);
Type expectedInterfaceType = typeof(IService<>);
bool implDoesImplementInterface = OpenGenericTypeImplementsOpenGenericInterface(
openGenericImplementation, expectedInterfaceType);
// This assert fails. Why?
Assert.IsTrue(implDoesImplementInterface);
}
我發現從Type.GetInterfaces()
方法返回的類型不匹配typeof(IService<>)
返回的類型。我想不通這是爲什麼,以及如何正確地驗證一些通用的類型定義是否繼承或實現一些其他的泛型類型定義。
這是怎麼回事,我該如何解決解決這個問題?
Inline:Assert.IsTrue(OpenGenericTypeImplements);什麼是OpenGenericTypeImplements? – HABJAN 2011-01-06 19:36:25
@HABJAN:你說得對。犯了一個錯字。修復。 – Anne 2011-01-06 19:50:55