2011-06-14 23 views
3

我有一个通用的方法:(简体)为C#泛型类型创建存根方法

public class DataAccess : IDataAccess 
{ 
    public List<T> GetEntity<T>() 
    { 
     return GetFromDatabase<T>(); //Retrieve from database base on Type parameter 
    } 
} 

出于测试目的,我要创建我要“富”应该有一些数据返回存根:

public class DataAccessStub : IDataAccess 
{ 
    public List<T> GetEntity<T>() 
    { 
     List<Foo> listFoo = new List<Foo>(); 
     Foo foo = new Foo(); 
     foo.Name = "Some Name"; 
     listFoo.Add(foo); 

     return listFoo; // I want Foo to be returned 
    } 
} 

由于T还没有确定是什么类型的呢,我不能返回List<Foo>。编译器错误将会发生。那么,如何为这种通用方法编写一个存根?

编辑:改变了一点点的代码。第一种方法将根据类型参数从数据库中检索。第二个是测试的存根。 对不起,我不确定这是否解释我想提到的。

谢谢。

+0

第一个存根有什么问题?调用者需要通过(或者在上下文中)T的值。 – carlosfigueira 2011-06-14 03:13:19

+3

我不明白这个问题,是不是你想要的第一个例子? – 2011-06-14 03:13:38

+0

如果你已经知道它是一个'List ',为什么你要把'List '作为返回类型? – Gabe 2011-06-14 03:20:22

回答

3
interface IA 
{ 
    List<T> Get<T>(); 
} 

class StubA : IA 
{ 
    public List<T> Get<T>() 
    { 
     var item = new Foo(); 
     var data = new List<Foo> {item}; 
     return new List<T>(data.Cast<T>()); 
    } 
} 
+0

谢谢!这给了我答案。 :) – TMS 2011-06-14 05:59:22