使用类型作为通用方法参数

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);