'Use Type as Generic Method Parameter
Let's say I have a generic method:
private static void GenericMethod<T1, T2>()
where T1 : SomeClass1
where T2 : SomeClass2
{
// Stuff
}
And I have structure that maps enum to some type, like this:
private static Dictionary<Enum, (Type, Type)> mappings =
new()
{
{
Enum.Value,
(typeof(DerivedFromSomeClass1), typeof(DerivedFromSomeClass2))
}
};
Now I want to call GenericMethod and use types from mapping as a substitute to T1, T2, like so:
var mappingType1 = mappings[enum].Item1;
var mappingType2 = mappings[enum].Item2;
GenericMethod<mappingType1, mappingType2>();
Obviously you can't do this, but... is there a way to achieve what I have in mind? Like I want to map some types to enum and then use type from enum as generic type of a method (T)?
Solution 1:[1]
Ok, as it turns out it is actually fairly simple. Here's how I did it:
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);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | stroibot |
