繁体   English   中英

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

[英]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>();

显然你不能这样做,但是......有没有办法实现我的想法? 就像我想 map 枚举一些类型,然后使用枚举中的类型作为方法的通用类型( 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM