创建泛型方法并使用类型参数

时间:2010-02-17 22:59:24

标签: 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);
}

现在,我想进一步消除对“serviceInterface”参数的需求,但我的问题是 - 我不知道如何将类型参数T与接口进行比较:做

T.Equals(typeof(ILookupService)) 

给出编译器错误:'T'是'type parameter',在给定的上下文中无效。

任何想法如何将类型参数与接口进行比较?

谢谢你, 安德烈

4 个答案:

答案 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运营商可以在这里适用吗?