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

标签 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 与接口(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/

相关文章:

java - 如何使用后面的代码创建自定义注释

c# - 数据库第一种方法中缺少 Entity Framework 导航属性

c# - BitmapSource 到流 Windows Phone

c# - 如何估计 WinForms 中方法的结束时间以正确通知用户预计完成时间?

c# - 需要有关泛型、接口(interface)和基类的帮助

c# - 如何在此上下文中调用接口(interface)方法?

C# IEnumerable.Count() 抛出 IndexOutOfRangeException

ios - 将 nil 传递给具有泛型类型约束的可选参数的编译错误

尝试在扩展类型 T 上实现抽象泛型类时出现 C# 编译错误

java - 通用接口(interface)和通配符