Я знаю, что в С# вы можете вызывать функцию из строки, делая это
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(TheCommandString);
theMethod.Invoke(this, userParameters);
Но я хотел бы что-то вроде этого
CallMethodFromName("Console.WriteLine", "Hello, world!");
Как вызвать функцию из другого пространства имен с помощью отражения?
Как метод узнает, в каком пространстве имен искать тип, объявляющий метод?





Вы можете использовать Type.GetType(), чтобы получить тип по пространству имен и имени.
...
Type thisType = Type.GetType("System.Console");
MethodInfo theMethod = thisType.GetMethod("WriteLine");
...
На основе ответа "Sticky bit":
Type thisType = Type.GetType("System.Console");
MethodInfo theMethod = thisType.GetMethod("WriteLine");
theMethod.Invoke(null, new object[1] { "Hello" });
Но вы должны быть осторожны с перегрузками методов, потому что тогда вы можете получить
System.Reflection.AmbiguousMatchException
Кроме того, этот подход не самый лучший, и это признак проблемы с дизайном. Еще одна вещь, которую следует иметь в виду, это использование оператора «nameof» для указания имен и методов пространств имен, чтобы избежать волшебных строк. Применяя это на примере, который я дал:
Type thisType = Type.GetType(nameof(System) + "." + nameof(Console));
MethodInfo theMethod = thisType.GetMethod(nameof(Console.WriteLine));
theMethod.Invoke(null, new object[1] { "Hello" });
Затем звонивший:
CallMethodFromName(nameof(Console) + "." + nameof(Console.WriteLine), "Hello, world!");
Почему вы хотите это сделать? Возможно, у вас проблема с XY?