簡體   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