[英]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.