我创建了这个方法,它是一个对象工厂:
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 与接口(interface)进行比较:做
T.Equals(typeof(ILookupService))
给出编译器错误:“T”是“类型参数”,在给定上下文中无效。
有什么想法可以将类型参数与接口(interface)进行比较吗?
谢谢你, 安德烈
最佳答案
您可以使用 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);
}
关于c# - 创建泛型方法并使用类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2285096/