使用类型作为通用方法参数
Use Type as Generic Method Parameter
假设我有一个通用方法:
private static void GenericMethod<T1, T2>()
where T1 : SomeClass1
where T2 : SomeClass2
{
// Stuff
}
并且我有将 enum
映射到某种类型的结构,如下所示:
private static Dictionary<Enum, (Type, Type)> mappings =
new()
{
{
Enum.Value,
(typeof(DerivedFromSomeClass1), typeof(DerivedFromSomeClass2))
}
};
现在我想调用 GenericMethod
并使用映射中的类型代替 T1, T2
,如下所示:
var mappingType1 = mappings[enum].Item1;
var mappingType2 = mappings[enum].Item2;
GenericMethod<mappingType1, mappingType2>();
显然你不能这样做,但是...有没有办法实现我的想法?就像我想将某些类型映射到枚举,然后使用枚举中的类型作为方法的泛型类型 (T
)?
好的,事实证明它其实很简单。
这是我的做法:
var mappingType1 = mappings[platform.Type].Item1;
var mappingType2 = mappings[platform.Type].Item2;
var method = typeof(Class).GetMethod(nameof(GenericMethod), BindingFlags.NonPublic | BindingFlags.Static);
var genericMethod = method.MakeGenericMethod(mappingType1, mappingType2);
genericMethod.Invoke(null, null);
假设我有一个通用方法:
private static void GenericMethod<T1, T2>()
where T1 : SomeClass1
where T2 : SomeClass2
{
// Stuff
}
并且我有将 enum
映射到某种类型的结构,如下所示:
private static Dictionary<Enum, (Type, Type)> mappings =
new()
{
{
Enum.Value,
(typeof(DerivedFromSomeClass1), typeof(DerivedFromSomeClass2))
}
};
现在我想调用 GenericMethod
并使用映射中的类型代替 T1, T2
,如下所示:
var mappingType1 = mappings[enum].Item1;
var mappingType2 = mappings[enum].Item2;
GenericMethod<mappingType1, mappingType2>();
显然你不能这样做,但是...有没有办法实现我的想法?就像我想将某些类型映射到枚举,然后使用枚举中的类型作为方法的泛型类型 (T
)?
好的,事实证明它其实很简单。 这是我的做法:
var mappingType1 = mappings[platform.Type].Item1;
var mappingType2 = mappings[platform.Type].Item2;
var method = typeof(Class).GetMethod(nameof(GenericMethod), BindingFlags.NonPublic | BindingFlags.Static);
var genericMethod = method.MakeGenericMethod(mappingType1, mappingType2);
genericMethod.Invoke(null, null);