Вам потребуется использовать отражение, чтобы получить метод следующим образом:
typeof(ClassWithGetAll).GetMethod("GetAll", BindingFlags.Instance | BindingFlags.NonPublic);
Это вернет информацию о методе, которую вы затем будете использовать для создания универсального метода через MakeGenericMethod
.
Единственный способ получить тип из строкового имени AFAIK - использовать Type.GetType , но для этого вам понадобится AssemblyQualifiedName , поэтому передается короткое / упрощенное имя типа string
или int
или что-то подобное, скорее всего, вернет null
.
Если вы выясните, как получить квалифицированное имя или как искать тип, последнее, что нужно сделать, этовызовите MethodInfo
, возвращенный из вызова MakeGenericMethod
, вот пример того, как может выглядеть код:
public void SomeFunction(string modelName)
{
//Sins i have no idea what the class/struct in which the method "GetAll" is called i will use this name
var instance = new ClassWithGetAll();
//Retrieves the info of "GetAll<T>"
MethodInfo method = typeof(ClassWithGetAll).GetMethod("GetAll", BindingFlags.Instance | BindingFlags.NonPublic);
//Commented out as you will need to figure out how to get the assembly qualified name of the input model name, unless it is qualified.
//modelName = GetAssemblyQualifiedName(modelName);
Type modelType = Type.GetType(modelName);
//Creates a generic method: "GetAll<T>" => "GetAll<modelType>"
method = method.MakeGenericMethod(modelType);
//Invokes the newly created generic method in the specified instance with null parameters, which returns the List<modelType>
object list = method.Invoke(instance, null);
}