假设我有一个类,根据传递给它的泛型类型调用一个基于
Func
的方法,并且我希望该类有一个期望的公共接口,类似于以下内容:var r = new Resolver();
var i = r.Invoke(10); // invokes some function `Func<int,int>`
var j = r.Invoke("Hello"); // Same, but `Func<string,string>`
var k = r.Invoke(10, 10); // Same but 'Func<int,int,int>`
我有一个像这样的实现:
class Resolver {
readonly IDictionary<Type, Func<object, object>> _funcs = new Dictionary<Type, Func<object, object>>();
public Resolver() {
_funcs.Add(typeof(int), o => (int)o*(int)o);
_funcs.Add(typeof(string), o => (string)o + (string)o);
// and so on;
}
public T Invoke<T>(T t1) {
return (T) _funcs[typeof (T)](t1);
}
public T Invoke<T>(T t1, T t2) {
return (T)_funcs[typeof(T)](t1);
}
}
但是,由于内部实现的Func<,>
具有object
作为通用类型,因此对于值类型来说,性能非常差。
有没有一种方法可以实现我想要的公共接口,避免值类型的装箱?我也不介意在实现中使用静态类型安全,但是如果没有也可以。