And*_*rey 10 c# generics interface
我创建了这个方法,它是一个对象工厂:
public static T GetService<T>(T serviceInterface)
{
if (serviceInterface.Equals(typeof(IMemberService)))
{
return (T)(object)new MemberService();
}
else if (serviceInterface.Equals(typeof(ILookupService)))
{
return (T)(object)new LookupService();
}
throw new ArgumentOutOfRangeException("No action is defined for service interface " + serviceInterface.Name);
}
Run Code Online (Sandbox Code Playgroud)
现在,我想进一步消除对"serviceInterface"参数的需求,但我的问题是 - 我不知道如何将类型参数T与接口进行比较:
T.Equals(typeof(ILookupService))
Run Code Online (Sandbox Code Playgroud)
给出编译器错误:'T'是'type parameter',在给定的上下文中无效.
任何想法如何将类型参数与接口进行比较?
谢谢,安德烈
Jar*_*Par 10
你可以typeof(T)用来获取一个Type可以取代使用的对象serviceInterface
例如
public static T GetService<T>()
{
Type serviceInterface = typeof(T);
if (serviceInterface.Equals(typeof(IMemberService)))
{
return (T)(object)new MemberService();
}
else if (serviceInterface.Equals(typeof(ILookupService)))
{
return (T)(object)new LookupService();
}
throw new ArgumentOutOfRangeException("No action is defined for service interface " + serviceInterface.Name);
}
Run Code Online (Sandbox Code Playgroud)