繁体   English   中英

使用泛型的C#存储库

[英]C# Repository using Generics

我有以下用于单元测试的存储库:

public class MyTestRepository<T>
{
    private List<T> entities = new List<T>();

    public IQueryable<T> Entities
    {
        get { return entities.AsQueryable(); }
    }

    public T New()
    {
        //return what here???
    }

    public void Create(T entity)
    {
        entities.Add(entity);
    }

    public void Delete(T entity)
    {
        entities.Remove(entity);
    }
}

我在New()方法中返回什么?

我试过这个:

    public T New()
    {
        return (T) new Object();
    }

但是当我运行我的单元测试时,这给了我以下异常:

System.InvalidCastException: Unable to cast object of type 'System.Object' to type 'MyCustomDomainType'.

有关如何实现New()方法的任何想法?

您可以为T类型参数添加约束:

public class MyTestRepository<T> where T : new() 

return new T(); 在方法中。

您应该通过添加new()约束来更改存储库定义,如下所示:

public class MyTestRepository<T> where T : new()
{
    ...
}

这将可以与MyTestRepository一起使用的类型约束到具有默认构造函数的类型。 现在,在New()方法中,您可以执行以下操作:

public T New()
{
    return new T();
}

假设类型T有一个公共/默认构造函数,这不会纠正异常吗?

public T New()
{
    return new T();
}

这不会起作用,因为你只是创建一个对象,没有别的。 如何使用Activator创建对象:

return (T)Activator.CreateInstance(typeof(T));

请参阅: http//msdn.microsoft.com/en-us/library/system.activator.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM