我创建了这个方法,它是一个对象工厂:
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);
}
现在,我想进一步消除对“serviceInterface”参数的需求,但我的问题是 - 我不知道如何将类型参数T与接口进行比较:做
T.Equals(typeof(ILookupService))
给出编译器错误:'T'是'type parameter',在给定的上下文中无效。
任何想法如何将类型参数与接口进行比较?
谢谢你, 安德烈
答案 0 :(得分:9)
您可以使用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);
}
答案 1 :(得分:1)
使用typeof(T)
。
所以,
typeof(T).Equals(typeof(ILookupService))
答案 2 :(得分:1)
if (typeof(IMemberService).IsAssignableFrom(typeof(T)))
{}
else if (typeof(ILookupService).IsAssignableFrom(typeof(T)))
{}
答案 3 :(得分:0)
is运营商可以在这里适用吗?