在分部类上创建Polymorphic方法以在c#上发送泛型类型

本文关键字:泛型类型 Polymorphic 创建 方法 | 更新日期: 2023-09-27 18:00:39

我想为各种部分C#类实现一个通用的List过程。我将使用这个通用方法来填充用于筛选数据的组合框。

到目前为止,我已经尝试了这个:

接口

首先,我创建了一个通用接口和一个自定义类

public class Enumerador
{
    public int ID{ get; set; }
    public string Description{ get; set; }
}
interface IEnumerador
{
    IEnumerable<Enumerador> Enumerar();
}

然后,在我想要的每个类上,我都实现了这样的接口:

 public IEnumerable<Enumerador> Enumerar()
    {
        using (var context = new OhmioEntities())
        {
            Clientes _allClients = new Clientes();
            _allClients.RazonFantasia = "Any Client";
            _allClients.ID_Cliente = -1;
            var query = context.Clientes;
            var _clients = query.Where(f => f.Activo == true).OrderBy(o => RazonFantasia).ToList();
            _clients.Insert(0, _allClients);
            var p = from cli in _clients
                    select new Enumerador { ID = cli.ID_Cliente, Description = cli.RazonFantasia };
            return p.ToList();
        }
    }

现在我得到了一个通用列表的填写和返回。现在我的问题是,我需要通过WCF将其发送到客户端,并且我想要一个通用(多态?)方法来实现这一点。到目前为止,我是这样解决的:

方法A

public IEnumerable<Enumerador> GetClients()
    {
        Clientes _cli = new Clientes();
        return _cli.Enumerar();            
    }

方法B

public IEnumerable<Enumerador> GetVendors()
    {
        Vendors _vnd = new Vendors();
        return _vnd.Enumerar();            
    }

所以我的问题是

*是否有一种多态泛型方法可以在单个过程中编写方法a和方法B(因为它们使用相同的泛型类型响应)?

*这将与WCF服务兼容吗?谢谢你所做的一切!

更新

好的。我做了一半。现在它几乎可以工作了。我修改了我的方法如下:

public IEnumerable<Enumerador> GetEnumerador<T>() where T : IEnumerador, new()
    {
        T _obj = new T();
        return _obj.Enumerar();  
    }

如果我在课堂上称之为伟大的工作。但是如果从WCF客户端调用它,我会得到:

非泛型方法"哦。客户OhmioService。OhmioServiceClient。GetEnumerador()'不能与类型参数一起使用

有什么想法吗?

更新2

这是我的服务合同:

public interface IOhmioService
{        
    [OperationContract]
    IEnumerable<Enumerador> GetEnumerador<T>() where T : IEnumerador, new();        
}

这是我的类实现:

public class OhmioService : IOhmioService
{
    public IEnumerable<Enumerador> GetEnumerador<T>() where T : IEnumerador, new()
    {
        T _obj = new T();
        return _obj.Enumerar();  
    }
}

从客户端这样称呼它:

public IEnumerable<Enumerador> Clients { get; set; } 
Clients = this.serviceClient.GetEnumerador<Clientes>();

在分部类上创建Polymorphic方法以在c#上发送泛型类型

你可以试试这样的东西:

public IEnumerable<Enumerador> GetClients<T>() where T : IEnumerador, new()
{
    T _cli = new T();
    return _cli.Enumerar();            
}

它强制TIEnumerador,并具有无参数构造函数。

这样称呼它:

IEnumerable<Enumerador> c = GetClients<Clientes>();

IEnumerable<Enumerador> v = GetClients<Vendors>();