从泛型方法返回类型

时间:2011-01-08 18:55:38

标签: c# generics c#-4.0

我再次抱歉,但这个问题延续了我的第一个问题: 考虑这个界面:

 interface IRepository<T,U> where T:class where U:class 
{
    IEnumerable<U> SelectAll();

    bool Insert(T item);

    IEnumerable<T> FindAll(Func<T, bool> exp);
}

我实现了这个界面:

 public class Repository : IRepository<Customer,Select4ColumnsOfCustomers>
{

    #region IRepository<Customer,Select4ColumnsOfCustomers> Members

    public IEnumerable<Select4ColumnsOfCustomers> SelectAll()
    {
        throw new NotImplementedException();
    }

    public bool Insert(Customer item)
    {
        throw new NotImplementedException();
    }

    public IEnumerable<Customer> FindAll(Func<Customer, bool> exp)
    {
        throw new NotImplementedException();
    }

    #endregion
}

public class Select4ColumnsOfCustomers
{
    public int CustomerID { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string Phone { get; set; }
}

我想在northwind数据库中只返回4列Customer表。 好的,但是如果我想添加其他返回其他类型的方法,我必须在接口和实现中声明S,U,M,W,...我必须编写此代码:

public class Repository : IRepository<Customer,RetType1,RetType2,RetType3,....>

这不好。这是替代方案。是否可以为返回类型写var?或者返回类型的占位符? 感谢

1 个答案:

答案 0 :(得分:3)

您的存储库可以实现多个接口。

public class Repository : IRepository<TResult1, T1>, IRepository<Tresult2, T2>, etc...

您的SelectAll方法需要是通用的,如

TResult SelectAll<TResult>();

然而Andrzej是对的,考虑使用ORM以便您可以概括此代码。查看NHiberanteEntity Framework