从传递给方法的Type中设置返回类型

时间:2018-01-14 03:32:34

标签: c#

方法resolve()从Dictionary返回初始化对象的实例,但我的问题是:是否有任何方法可以简化resolve()方法,我们仍然将类型作为参数传递但是在我们没有&#39之后;需要施展它。我考虑过通用解决方案,但resolve<ClassAbraKadabra>(typeof(ClassAbraKadabra))看起来重复且无法简化。

class Foo {
   //something here
}

//reality
class Resolver{
   public void proc() {
      Foo foo = (Foo) resolve(typeof(Foo));
   }
   private object resolve(Type type) {
      var obj = getInstanceOfObjectFromMapByType(type):
      return obj;
   }
}

//expected
class Resolver{
   public void proc() {
      Foo foo = resolve(typeof(Foo));
   }
   private ??? resolve(Type type) {
      //magic here
   }
}

//generic way
class Resolver{
   public void proc() {
      Foo foo = resolve<Foo>(typeof(Foo));
   }
   private T resolve<T>(Type type) {
      var obj = getInstanceOfObjectFromMapByType(type):
      return (T)obj;
   }
}

1 个答案:

答案 0 :(得分:1)

你的通用方法几乎就在那里,你不需要传入类型,只需从泛型方法中做一个typeof(T)

//generic way
class Resolver{
   public void proc() {
      Foo foo = resolve<Foo>();
   }
   private T resolve<T>() {
      var obj = getInstanceOfObjectFromMapByType(typeof(T)):
      return (T)obj;
   }
}

如果你真的必须传入类型,那么“现实”方式是唯一的选择,你必须在更高级别进行转换,并尝试返回一个仍然有用的公共接口。