在字典中装箱后检索泛型委托的原始类型

时间:2015-03-13 15:56:23

标签: c# dictionary delegates boxing

上下文 - 第1部分

我有一个委托来构建来自实部和虚部的复数,其定义如下:

public delegate T BuildFromRealImagPartsDelegate<out T, in TUnderlying>(TUnderlying real, TUnderlying imag);

这个委托使用泛型,因为在我的情况下,真实和虚构部分的复杂类型和底层类型都可以改变......嗯,这对于我想要解决的问题不是很重要,但是对于{{ 1}}基于System.Numerics.Complex,这给出了:

System.Double

上下文 - 第2部分

现在,为了处理我可能遇到的各种情况,这个委托被插入一个包含许多其他代码的字典中:

BuildFromRealImagPartsDelegate<Complex, double> buildFromRealImag = (r, i) => new Complex(r, i);

注意:重要的是,字典使用var dictionnary = new Dictionary<Type, BuildFromRealImagPartsDelegate<Object, Object>>(); dictionnary.Add(typeof(Complex), (r, i) => buildFromRealImag); 作为泛型类型。事实上,我需要收集许多不同类型的不同代表,所以这是我最好的选择。

问题

当从字典中提取委托时,我想找回真实和虚部的原始底层类型。但是因为字典使用Object我被锁定了,找不到用于定义委托的类型:

Object

是否有快速解决方案,或者我是否应该在字典中添加委托时为真实/图像部分传递初始类型?

修改

以下是准备编译为控制台应用程序的示例代码:

var deleg = dictionnary[typeof(Complex)];
var underlyingTypeForRealImag = deleg.GetType().GetGenericArguments()[1]; // Here returns typeof(object) but would like to obtain original type (i.e. typeof(double)) 

我想要的是在dedelegate被创建时(即在插入字典之前)检索用于真实图像/部分的泛型类型...当然可能! ...如果不是我有一个解决方法(附加字典包含用于真实/图像部分的类型)但真的我想知道是否有直接的解决方案。

0 个答案:

没有答案