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