0

我有这个界面:

public interface IRepository<T>
{
    List<T> List();
    T Get(int Id);        
    bool Add(T entity);
    bool Update(T entity);
}

我有这门课:

public class Customer<T> : IRepository<Entities.Customer>
{
   public Entities.Customer Get(int Id)
   {
      var c = new Entities.Customer();
      return c;
   }

   //continue...
}

如何将泛型类转换为这样的泛型接口:

//Other method
public IRepositorio<T> DoStuff<T>(int Id)
{  
   var a = (IRepository<Entities.Customer>)Activator.CreateInstance(typeof(T)); // ok               
   var b = (IRepository<T>)Activator.CreateInstance(typeof(T)); // Exception: unable to cast       

   return object; // an object
}

我从这个 MCV 控制器调用:

  public ActionResult Home()
  {
     var repo = new Repository();
     repo.DoStuff<Customer<Entities.Custormer>>(10);

     return View();
  }

我的受孕还好吗?没有动态这可能吗?

4

2 回答 2

1

Activator.CreateInstance(typeof(T));- 这会为您创建 的新实例T,这Entities.Customer在您的示例中,但看起来您想要创建 的实例Customer<Entities.Customer>

于 2013-04-11T19:22:01.650 回答
1

根据提供的代码,我尝试了以下编译好的

public class Entities {
    public class Customer {
    }
}

public interface IRepository<T> {
    T Get(int Id);
}

public class Customer<T> : IRepository<Entities.Customer> {
    public Entities.Customer Get(int Id) {
        var cliente = new Entities.Customer();
        return cliente;
    }
}

public class foo {

    public static IRepository<T> DoStuff<T>(int Id) {
        var a = (IRepository<Entities.Customer>)Activator.CreateInstance(typeof(T));
        var b = (IRepository<T>)Activator.CreateInstance(typeof(T));

        return b; // an object
    }

}

但是,我不确定 T 是什么意思。当我跑步和打电话时

foo.DoStuff<Entities.Customer>(0);

然后我就var a行了一个运行时错误,因为该类Entities.Customer没有实现接口IRepository<T>。如果我打电话

foo.DoStuff<Customer<Entities.Customer>>(0);

然后我在'var b'行上得到运行时错误,因为类Customer<Entities.Customer>实现IRepository<Entities.Customer>而不是IRepository<Customer<Entities.Customer>>

这两个例外都是正确的,所以希望问题的作者可以从这个答案中找出问题所在。

于 2013-04-11T18:54:16.813 回答