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


方法

resolve()字典中返回初始化对象的实例,但我的问题是:有没有办法简化resolve()方法,我们仍然将类型作为参数传递,但在我们不需要强制转换它之后。我想到了通用分辨率,但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;
   }
}

您的泛型方式几乎就在那里,您不需要传入类型,只需从泛型方法内部执行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;
   }
}

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

最新更新