你能用.NET 4.0吗?如果是这样,使用动态类型就变得非常简单:
private object Combine(dynamic o, dynamic o1)
{
// Assumes an appropriate addition operator, found at execution time
return o + o1;
}
另一种选择是为每对可能的类型都有一个委托映射。不幸的是,在.NET 4.0之前
Tuple
类型,因此您必须定义自己的
TypePair
键入作为映射键。当然,你需要确保你涵盖每一对可能的…但是,当您有合适的“addDelegate”方法时,编译器至少可以提供帮助:
private void AddDelegate<T1, T2>(Func<T1, T2, object> sumFunction)
{
// Put the function in the map
...
}
AddDelegate<int,int>((x, y) => x + y);
AddDelegate<int,float>((x, y) => x + y);
AddDelegate<int,string>((x, y) => x + y);
AddDelegate<float,int>((x, y) => x + y);
AddDelegate<float,float>((x, y) => x + y);
AddDelegate<float,string>((x, y) => x + y);
...
顺便说一句,我带了
bool
从中可以看出
布尔
和A
float
(例如)没有任何意义。不过,您可以决定如何组合它们。
不过,正如米奇所说,我会重新审视你的设计决策——你确定吗?
真正地
需要这个吗?这是一个非常奇怪的要求。你能告诉我们大局吗?我们可以建议其他方法。