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